Validator 验证 - 在validation.xml中定义常量

 
常量有两种:一种是全局范围常量。一种是某个 formset 范围的常量。位置如下:
form-bean à form-validation à global à constant
form-bean à form-validation à formset à constant
格式如下:
<form-validation>
    <global>
        <constant>
            <constant-name>globalVarName</constant-name>
            <constant-value>globalVarValue</constant-value>
        </constant>
    </global>
    <formset>
        <constant>
            <constant-name>formsetVarName</constant-name>
            <constant-value>formsetVarValue</constant-value>
        </constant>      
        <form name="MyForm">
            <field property="myfield"
                    depends="someRule,anotherRule">
                <var>
                    <var-name>someRule</var-name>
                    <var-value>${globalVarName}</var-value>
                </var>
                <var>
                    <var-name>anotherRule</var-name>
                    <var-value>${formsetVarName}</var-value>
                </var>
            </field>
        </form>
    <formset>
<form-validation>
如果你有多个 field 元素要用到同一个值,则可以定义一个这个值的常量,这样就可以应用这个常量了
如果这个常量作用于整个应用程序则生命为 global 范围的常量。如果这个常量只作用于某个特定的 form 且被重复使用,则的定义它为 formset 范围的常量。举例如下:
<form-validation>
    <global>
        <constant>
            <constant-name>usernameMinLength</constant-name>
            <constant-value>7</constant-value>
        </constant>
    </global>
    <formset>
        <constant>
            <constant-name>nameMaxLength</constant-name>
            <constant-value>40</constant-value>
        </constant>      
        <form name="RegistrationForm">
            <field property="username"
                    depends="required,minlength">
                <arg key="prompt.username"/>
                <arg key="${var:minlength}" name="minlength"
                   resource="false"/>
                <var>
                    <var-name>minlength</var-name>
                    <var-value>${usernameMinLength}</var-value>
                </var>
            </field>
            <field property="firstName"
                    depends="required,maxlength">
                <arg key="prompt.firstName"/>
                <arg key="${var:maxlength}" name="maxlength"
                   resource="false"/>
                <var>
                    <var-name>maxlength</var-name>
                    <var-value>${nameMaxLength}</var-value>
                </var>
            </field>
            <field property="lastName"
                    depends="required,minlength,maxlength">
                <arg key="prompt.lastName"/>
                <arg key="${var:minlength}" name="minlength"
                   resource="false"/>
                <arg key="${var:maxlength}" name="maxlength"
                   resource="false"/>
                <var>
                    <var-name>minlength</var-name>
                    <var-value>2</var-value>
                </var>
                <var>
                    <var-name>maxlength</var-name>
                    <var-value>${nameMaxLength}</var-value>
                </var>
            </field>
        </form>
    <formset>
<formset-validation>
如果你使用 mask 验证规则严整表单的格式时,你只需要在一处定义这个格式的正则表达式。
n          用正则表达式验证表单字段
mask 验证规则提供了基于正则表达式的验证机制,如:
<form name="ValidationTestForm">
    <!-- Validate Social Security Number -->
    <field property="ssn"
            depends="required,mask">
        <arg key="prompt.ssn"/>
        <var>
            <var-name>mask</var-name>
            <var-value>^[0-9]{3}-[0-9]{2}-[0-9]{4}$</var-value>
        </var>
    </field>
</form>
正则表达式使用通用符号描述并解析文本,使用它你可以验证数据是否符合指定的格式。
STRUTS 框架通过 mask 验证规则使用正则表达式。可以在 var 元素中指定正则表达式。
<var>
    <var-name>mask</var-name>
    <var-value>^[0-9]{3}-[0-9]{2}-[0-9]{4}$</var-value>
</var>
name 属性必须是 mask value 指定要使用的正则表达式。如果匹配则通过验证,否则验证失败。

如果你使用struts1.1及以后的版本,那么正则表达式必须以“^”开头,以“$”结尾。
 

 
 

举例:
^[0-9]{3}-[0-9]{2}-[0-9]{4}$
理解如下:
开头一个开头符号(^),,接着是三个0到9的字符({3}),接着是连接符号,接着是两个0到9的字符([0-9]),接着是一个连接符号(-),接着是四个0到9的字符([0-9]),,接着是一个结束符号($).
n          requiredif:
struts1.1Z 中,如果一个字段的验证依赖于另一个字段,可用 requiredif 验证规则。
举例如下:
<!-- zipCode is required if city is null or state is null -->
<field property="zipCode" depends="requiredif">
    <arg key="prompt.zipCode"/>
    <var>
        <var-name>field[0]</var-name>
        <var-value>city</var-value>
    </var>
    <var>
        <var-name>fieldTest[0]</var-name>
        <var-value>NULL</var-value>
    </var>
    <var>
        <var-name>field[1]</var-name>
        <var-value>state</var-value>
    </var>
    <var>
        <var-name>fieldTest[1]</var-name>
        <var-value>NULL</var-value>
    </var>
    <var>
        <var-name>fieldJoin</var-name>
        <var-value>OR</var-value>
    </var>
</field>
city state 的值为空或不存在时, zipCode 不能为空。

客户端不能进行requiredif验证
 

 

struts1.1 前要实现这样的 功能必须自己写代码进行验证。
field[i] 对应的 var-value 值代表一个表单属性:
<var>
    <var-name>field[0]</var-name>
    <var-value>property name</var-value>
</var>
fieldTest[i] 代表测试类型:
<var>
    <var-name>fieldTest[i]</var-name>
    <var-value>test type</var-value>
</var>
测试类型有以下三种:
NULL
字段为 NULL 或空字符串
NOTNULL
字段不为 NULL 或空字符串
EQUAL
字段值为一个指定的值
 
如果测试类型为 EQUAL ,则还需定义一个元素 fieldValue[i]:
<var>
    <var-name>fieldValue[i]</var-name>
    <var-value>literal value</var-value>
</var>
如果这个属性是一个数字的,则字面值将被转换为数值。否则字面值将当作一个字符串。
如果依赖多个字段,则须用 fieldJoin 变量确定这多个字段的逻辑关系:
<var>
    <var-name>fieldJoin</var-name>
    <var-value>logical operator</var-value>
</var>
合法的 value 值为 AND OR AND 表示所有依赖的字段都必须符合 fieldTest 规定的类型时,要验证的数据不为空; OR 表示所依赖的字段有一个符合要求时要验证的数据不为空。
struts1.2 中, requiredif 已被 validwhen 代替。
n          validwhen
如下例表示当下列事实发生时, zipCode 合法有效:
1.       city state 属性不为空
2.       zipCode 不为空
<form name="AddressForm">
 <field property="zipCode" depends="validwhen">
      <arg key="prompt.zipCode"/>
      <var>
          <var-name>
              test
          </var-name>
          <var-value>
              (((city != null) and (state != null)) or (*this* != null))
          </var-value>
      </var>
 </field>
<form name="AddressForm">
validwhen requiredif 功能更强大。 requiredif 表示“如果。。。这个字段不为空”。 validwhen 表示“当。。。时这个字段有效”。

当你使用这个验证时,请确保验证结果能为 true
 

 
 

*this* 符号表示要验证的字段 zipCode
完整的举例如下:
n          struts-config.xml:
    < action
      attribute = "checkForm"
      name = "checkForm"
      input = "/validate/error.jsp"
      path = "/validate/check"
      scope = "request"
      type = "cn.rolia.struts.action.validate.CheckAction" >
      < forward name = "success" path = "/validate/success.jsp" />
    </ action >
    < form-bean name = "checkForm" type = "org.apache.struts.validator.DynaValidatorForm" >
      < form-property name = "zipCode" type = "java.lang.String" />
      < form-property name = "province" type = "java.lang.String" />
      < form-property name = "city" type = "java.lang.String" />
    </ form-bean >
n         CheckAction.java:
    public ActionForward execute(ActionMapping mapping, ActionForm form,
           HttpServletRequest request, HttpServletResponse response) {
       DynaValidatorForm checkForm = (DynaValidatorForm) form; // TODO Auto-generated method stub
       return mapping.findForward( "success" );
    }
}
n         ApplicationResources.properties:
prompt.zipCode= zipCode
errors.required={0} is required.
/validate/error.jsp:
  < body >
    < html:errors />< br >
  </ body >
n         /validate/input.jsp:
      < html:form action = "/validate/check" >
        < table >
          < tr >
            < td > 所在省 </ td >< td >< html:text property = "province" ></ html:text ></ td >
          </ tr >
          < tr >
            < td > 所在市 </ td >< td >< html:text property = "city" ></ html:text ></ td >
          </ tr >
          < tr >
            < td > 邮政编码 </ td >< td >< html:text property = "zipCode" ></ html:text ></ td >
          </ tr >
          < tr >
            < td >< html:submit value = " 提交 " /></ td >< td >< html:reset value = " 清除 " /></ td >
          </ tr >
        </ table >
      </ html:form >
n         /validate/success.jsp:
  < body >
 success < br >
    < bean:write name = "checkForm" property = "zipCode" />< br >
  </ body >
validation.xml:
        < form name = "checkForm" >
          < field property = "zipCode" depends = "validwhen" >
                < arg0 key = "prompt.zipCode" />
                < var >
                     < var-name >
                     test
                 </ var-name >
                     < var-value >
                         (((city != null) and (province != null)) or (*this* != null))
                     </ var-value >
                </ var >
          </ field >
       </ form >
n         indexedListProperty
时间验证 date
希望验证一个时间字段是否符合某个特定的格式时使用 date 验证规则。如:
<field property="date1" depends="date">
    <arg key="Date1" resource="false"/>
    <var>
        <var-name>datePattern</var-name>
        <var-value>MM/dd/yyyy</var-value>
    </var>
</field>
 
<field property="date2" depends="date">
    <arg key="Date2" resource="false"/>
    <var>
        <var-name>datePatternStrict</var-name>
        <var-value>MM/dd/yyyy</var-value>
    </var>
</field>
 
<field property="dateTime" depends="date">
    <arg key="DateTime" resource="false"/>
    <var>
        <var-name>datePattern</var-name>
        <var-value>MM/dd/yy HH:mm</var-value>
    </var>
</field>
datePattern 变量通过使用 java.text.SimpleDateFormat 指定字段的格式。
如果 SimpleDateFormat 能将字段值转换为日期格式,则验证通过,否则验证失败。
datePatternStrict 要求字段值的长度要与模式的长度相同。
如模式为 MM/dd/yyyy ,则字段值 5/10/1963 代表 May 10, 1963 。如果使用 datePattern 则验证通过。如果使用 datePatternStrict 则验证不通过,因为也的部分是一个数字而不是格式指定的两个。
你可以使用 mask 验证对时间进行工详细的控制。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值