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