短路校验器

短路校验器

xwork-validator-1.0.3.dtd文件中可以看到,校验规则文件的<validator .../>元素和<field-validator .../>元素可以指定一个可选的short-circuit属性,这个属性指定该校验器是否是短路校验器,该属性的默认值是false,即默认是非短路校验器。

短路校验器其实是非常有用的,读者朋友可以翻回去看如图4.14所示的页面,在密码输入框的上面看到两行校验提示信息:

您必须输入密码!

您输入的密码只能是字母和数字,且长度必须在425之间!

这种提示信息是多么的不友好啊,浏览者此时完全没有输入密码,而我们的应用一下子就显示了两条提示信息(而且,第二条校验提示完全是多余的,完全没有输入密码,当然长度不在425之间)。通常的做法是:如果浏览者完全没有为某个输入框输入任何内容,系统应该仅输出第一行提示信息,而不是一次输出所有的校验提示。

为了达到这种效果,我们应该采用短路校验器。采用短路校验器只需要在<validator .../>元素或<field-validator .../>元素中增加short-circuit="true"即可。

修改上面的配置文件,对于采用字段校验器的校验规则文件,将用户名必填和密码必填校验规则配置成短路校验器。修改后的校验文件片段如下。

程序清单:codes\04\4.2\short-cut\WEB-INF\src\org\crazyit\app\action\RegistAction-validation.xml

<!-- 校验Actionname属性 -->

<field name="name">

     <!-- 指定name属性必须满足必填规则 -->

     <field-validator type="requiredstring" short-circuit="true">

          <param name="trim">true</param>

          <message key="name.requried"/>

     </field-validator>

     <!-- 指定name属性必须匹配正则表达式 -->

     <field-validator type="regex">

          <param name="expression"><![CDATA[(\w{4,25})]]></param>

          <message key="name.regex"/>

     </field-validator>

</field>

<!-- 校验Actionpass属性 -->

<field name="pass">

     <!-- 指定pass属性必须满足必填规则 -->

     <field-validator type="requiredstring" short-circuit="true">

          <param name="trim">true</param>

          <message key="pass.requried"/>

     </field-validator>

     <!-- 指定pass属性必须满足匹配指定的正则表达式 -->

     <field-validator type="regex">

          <param name="expression"><![CDATA[(\w{4,25})]]></param>

          <message key="pass.regex"/>

     </field-validator>

</field>

在上面的配置文件中,将userpass的必填校验器配置成短路校验器。对于同一个字段内的多个校验器,如果一个短路校验器校验失败,其他校验器都根本不会继续校验。

将校验规则文件修改成上面文件所示的样式后,如果依然不输入用户名和密码,直接提交该请求,将看到如图4.15所示的页面。

 

 

4.15  短路校验器的效果

相比之下,在一个<field .../>元素内定义字段校验器,比使用带有一个fieldName参数的<validator .../>元素好得多,而且XML代码本身也清晰得多(字段分组更清晰了)。因此,笔者更倾向于使用字段校验器风格。

4.15所使用的是服务器端短路校验器风格,如果使用客户端短路校验器风格(修改表单页的s:form标签,增加validate="true"),将看到如图4.16所示的效果。

从图4.16中可以看出,当在客户端校验中使用短路特性时,第一个表单域校验失败时将导致系统不会校验其他表单域。

 

 

 

4.16  客户端校验中使用短路特性

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值