动态ActionForm

actionform太多会是系统太庞大,可以使用动态actionform,我们打印某个属性,可以使用DynaActionFom.get("属性名"),但是这样就失去了验证功能。我们用validate框架,需要俩包支持validate框架工作。新建一个.xml文件来调用 validator-rules.xml,就叫validation.xml吧。但是系统不认识,所以要以插件的形式在struts.xml里注册,多个xml文件用逗号隔开。动态ActionForm不支持validate框架,若是动态的则继承org.apache.struts.validator.DynaValidatorForm

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
   <set-property value="/WEB-INF/validator-rules.xmlEB-INF/validation.xml"                  poperty="pathnames"/>
</plug-in>

validation.xml里的代码

<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>       
 <formset>        
  <!-- 验证表单 -->
 <form name="regForm">
  <field property="cname" depends="required">
   <msg name="required" key="error.none"/>
   <arg0 name="required" key="cname"/> 
  </field>
  
  <field property="email" depends="required,email">
   <msg name="required" key="error.none"/>
   <arg0 name="required" key="email" resource="false"/>
   <msg name="email" key="error.email"/>
  </field>
  
  <field property="phone" depends="required,long">
   <msg name="required" key="error.none"/>
   <arg0 name="required" key="phone" resource="false"/>
   <msg name="long" key="error.number"/>
   <arg0 name="long" key="phone" resource="false"/>
  </field>
 </form>
 </formset>
</form-validation>

设定单个验证门限,前边的都是用的是否空,是否。。。

需要注意的是设定门限那一块

<field property="phone" depends="required,long,minlength,maxlength">
   <msg name="required" key="error.none"/>
   <arg0 name="required" key="phone" resource="false"/>
   <msg name="long" key="error.number"/>
   <arg0 name="long" key="phone" resource="false"/>
   
   <msg name="minlength" key="error.minlength"/>
   <arg0 name="minlength" key="phone" resource="false"/>
   <arg1 name="minlength" key="${var:minlength}" resource="false"/>
   <!-- 设定门限 -->
   <var>
    <var-name>minlength</var-name>
    <var-value>7</var-value>
   </var>
   <msg name="maxlength" key="error.maxlength"/>
   <arg0 name="maxlength" key="phone" resource="false"/>
   <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
   <var>
    <var-name>maxlength</var-name>
    <var-value>10</var-value>
   </var>
  </field>

用${var:maxlength}取代10这个值是为了避免与下边的值重复。

设定多个验证门限

<field property="age" depends="required,integer,intRange">
   <msg name="required" key="error.none"/>
   <arg0 name="required" key="age" resource="false"/>
   <msg name="integer" key="error.number"/>
   <arg0 name="integer" key="age" resource="false"/>
   <msg name="intRange" key="error.range"/>
   <arg0 name="intRange" key="age" resource="false"/>
   <arg1 name="intRange" key="0" resource="false"/>
   <arg2 name="intRange" key="100" resource="false"/>
   <!-- 设定门限,设定max,min就行了 -->
   <var>
    <var-name>min</var-name>
    <var-value>0</var-value>
   </var>
   <var>
    <var-name>max</var-name>
    <var-value>100</var-value>
   </var>
  </field>

设定条件验证门限

<var>

  <var-name>test</var-name>

  <var-value>(前一个属性 == *this*)</var-value>

</var>

</var>

非动态类推荐使用类org.apache.commons.validator.GenericValidator,里面有很多静态方法。

原文地址:https://www.cnblogs.com/wyhong/p/2390325.html