Struts

DynaActionForm

クラスは、動的かつ宣言的にフォームBeanを作成できる興味深い機能です。これにより、実際のJavaフォームBeanクラスを作成する代わりに、Struts構成ファイルに「仮想」フォームBeanを作成することができます。シンプルで退屈なフォームBeanクラスをたくさん作成することを避けることができます。

たとえば、DynaActionFormには「username」プロパティが含まれています。

<form-bean name="dynaUserForm"
    type="org.apache.struts.action.DynaActionForm">
    <form-property name="username" type="java.lang.String"/>
</form-bean>

“DynaActionForm”と “ActionForm”の違いは、

Struts設定ファイルで宣言します)、ActionFormは行います。

  • DynaActionFormでは、フォーム検証はActionクラスに実装されていますが、

ActionFormは独自のクラスの内部に実装しています。

DynaActionFormの例


Struts <html:text>テキストボックスの例

は、通常の “ActionForm”の代わりに “DynaActionForm”を使用するためのリファクタリングを行います。

Struts DynaActionFormの例をダウンロード – リンク://wp-content/uploads/2010/04/Struts-DynaActionForm-Example.zip[Struts-DynaActionForm-Example.zip]

1. struts-config.xml

Struts設定ファイルで “DynaActionForm”を宣言し、通常のようにActionクラスにリンクします。

  • struts-config.xml **

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://jakarta.apache.org/struts/dtds/struts-config__1__3.dtd">

<struts-config>

    <form-beans>
        <!--<form-bean
            name="userForm"
            type="com.mkyong.common.form.UserForm"/>
        -->
        <form-bean name="dynaUserForm"
              type="org.apache.struts.action.DynaActionForm">
              <form-property name="username" type="java.lang.String"/>
        </form-bean>

    </form-beans>

    <action-mappings>

            <action
            path="/LoginPage"
            type="org.apache.struts.actions.ForwardAction"
            parameter="/pages/login.jsp"/>

        <action
            path="/Login"
            type="com.mkyong.common.action.UserAction"
            name="dynaUserForm"
            >

            <forward name="success" path="/pages/welcome.jsp"/>
            <forward name="failed" path="/pages/login.jsp"/>

        </action>
    </action-mappings>

    <message-resources
        parameter="com.mkyong.common.properties.Common"/>

</struts-config>

2.アクション

すべてのフォーム検証メソッドをActionクラスに移動し、 ”

get()

“メソッドを使用して “DynaActionForm”プロパティを取得します。

  • UserAction.java **

package com.mkyong.common.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;

public class UserAction extends Action{

    public ActionForward execute(ActionMapping mapping,ActionForm form,
        HttpServletRequest request,HttpServletResponse response)
        throws Exception {

        DynaActionForm userForm = (DynaActionForm)form;

        ActionMessages errors = new ActionMessages();

       //do the form validation in action class
        if( userForm.get("username") == null ||
                         ("".equals(userForm.get("username")))) {

           errors.add("common.name.err",
                    new ActionMessage("error.common.name.required"));

        }

        saveErrors(request,errors);

        if(errors.isEmpty()){
            return mapping.findForward("success");
        }else{
            return mapping.findForward("failed");
        }

    }

}

結論

あなたはDynaActionFormに行くべきですか?この機能は、ActionFormクラスの作成に多くの時間を節約できますが、制限があり、特定のタスクを実行するために実際のActionFormを使用する必要があることがあります。大規模なプロジェクト環境では、メンテナンスは常に第一に考慮する必要があります。従うためには「フォーム標準」を作成しなければなりません。サポートする必要が非常に強い場合を除いて、両方を混在させることは現実的ではありません。個人的には、DynaActionFormをEclipse IDEで使用することはめったにありません。ActionFormは結局作成するのが難しくありません。