Struts DynaActionFormの例

Struts DynaActionFormの例

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

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


    

「DynaActionForm」と「ActionForm」の違い

  • DynaActionFormは、実際のJavaクラスを作成するために必要ではありません(Struts構成ファイルで宣言するだけです)が、ActionFormは作成します。

  • DynaActionFormでは、フォーム検証はActionクラスに実装されますが、ActionFormは独自のクラス内に実装されます。

DynaActionFormの例

Struts <html:text> textbox exampleは、通常の「ActionForm」の代わりに「DynaActionForm」を使用するようにリファクタリングされます。

Struts DynaActionFormの例をダウンロード–Struts-DynaActionForm-Example.zip

1. struts-config.xml

Struts構成ファイルで「DynaActionForm」を宣言し、通常のようにActionクラスにリンクします。

struts-config.xml





    
        
        
              
        

    

    

            

        

            
            

        
    

    

2. アクション

すべてのフォーム検証メソッドをActionクラスに移動し、「get()」メソッドを介して「DynaActionForm」プロパティを取得します。

UserAction.java

package com.example.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を使用する必要がある場合があります。 大規模なプロジェクト環境では、メンテナンスは常に最優先事項です。従うために「フォーム標準」を作成する必要があります。サポートする非常に堅実な理由がない限り、両方を併用することは実用的ではありません。 個人的には、Eclipse IDEでDynaActionFormを使用することはめったにないため、ActionFormを作成するのはそれほど難しくありません。