Struts DynaActionFormの例
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は結局作成するのが難しくありません。