16. DynaValidatorForm/DynaValidatorActionForm
Struts 16章 DynaValidatorForm/DynaValidatorActionForm
- 16.1. DynaValidatorForm
- 16.2. DynaValidatorActionForm
- 16.3. プロパティ値のコピー
16.1. DynaValidatorForm
StrutsにはDynaActionFormとValidatorFormを組み合わせたActionFormも提供されています。「org.apache.validator.DynaValidatorForm」です。DynaValidatorFormでは
- Struts設定ファイルでのプロパティの定義
- validatorの機能によるプロパティ値のチェック
の両方の機能が提供されています。Struts設定ファイルでのプロパティの定義はDynaActionFormと同じように行います。プロパティの設定はDynaActionFormと同じことができます。DynaActionFormと異なり、<form-bean>要素のtype属性に「org.apache.struts.validator.DynaValidatorForm」を指定します。またvalidatorの機能も使用しますので、ValidatorPlugInの設定も忘れないようにしてください。
... <struts-config> <form-beans> <form-bean name="DynaProductForm" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name="name" type="java.lang.String" initial="" /> <form-property name="maker" type="java.lang.String" initial="" /> <form-property name="price" type="int" initial="0" /> </form-bean> ... <action path="/productInput" name="DynaProductForm" forward="check.jsp" /> ... <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml" /> </plug-in> </struts-config>
続いてvalidatorの設定を行います。validation.xmlにValidatorFormと同じように設定します。<form>要素のname属性にはStruts設定ファイルに定義したActionFormの名前を設定します。各プロパティに対するチェック内容の設定は、ValidatorFormと同じようにします。
... <form-validation> <formset> <form name="DynaProductForm"> <field property="name" depends="required"> <msg name="required" key="name.invalidate" /> </field> <field property="maker" depends="required"> <msg name="required" key="maker.invalidate" /> </field> <field property="price" depends="required, intRange"> <msg name="required" key="price.invalidate" /> <msg name="intRange" key="price.invalidate" /> <var> <var-name>min</var-name> <var-value>1</var-value> </var> <var> <var-name>max</var-name> <var-value>1000000</var-value> </var> </field> </form> ... </formset> </form-validation>
以上でDynaValidatorFormに関する作業は終了で、設定を行うだけでActionクラスで使用することができます。Actionクラスでプロパティ値を取り出す方法は以下の通りです。DynaActionFormの場合と同じです。
package sample; import javax.servlet.http.*; import org.apache.struts.action.*; import org.apache.struts.validator.DynaValidatorForm; public class ProductInputAction extends Action{ public ActionFormward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ DynaValidatorForm dynaForm=(DynaValidatorForm)form; String name=(String)dynaForm.get("name"); String maker=(String)dynaForm.get("maker"); Integer price=(Integer)dynaForm.get("price"); ... } }
(実習課題1)
15章実習課題1のWebアプリケーションを改良しなさい。
- DynaValidatorFormを使用するようにする事。