`
271788203
  • 浏览: 483372 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

validation mask & date

阅读更多

常量有两种:一种是全局范围常量。一种是某个formset范围的常量。位置如下:
格式如下:
<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属性必须是maskvalue指定要使用的正则表达式。如果匹配则通过验证,否则验证失败。

 

如果你使用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>
citystate的值为空或不存在时,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值为ANDORAND表示所有依赖的字段都必须符合fieldTest规定的类型时,要验证的数据不为空;OR表示所依赖的字段有一个符合要求时要验证的数据不为空。
struts1.2中,requiredif已被validwhen代替。
n          validwhen
如下例表示当下列事实发生时,zipCode合法有效:
1.       citystate属性不为空
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">
validwhenrequiredif功能更强大。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验证对时间进行工详细的控制。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics