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

![Webアプリ開発エンジニアのための技術情報サイト[テックスコア]](/common/img/description.gif) 
 







