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を使用するようにする事。

