目次へ

16. DynaValidatorForm/DynaValidatorActionForm

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

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp