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を作成するのはそれほど難しくありません。