struts2 xml 校验 小记2

        相信很多的人都用过struts2的配置文件验证,说实话,这个服务端校验确实比较好,可以有效防止一些错误数据提交到数据库。这里要说的是当类型转换失败时,struts默认的提示信息就不那么友好了,所以我们需要重新为它添加国际化资源,即:

invalid.fieldvalue.model.serverId=设备ID必须为数值类型

前面这一串“invalid.fieldvalue”是固定的,后面的就是你的xml中指定的校验字段名称,我的校验xml是:

<field name="model.serverId"> 
     <field-validator type="required" short-circuit="true"> 
         <param name="trim">true</param> -->
         <message key="messages.validate.server.serverId.requied"></message> 
     </field-validator> 
     <field-validator type="int" short-circuit="true"> 
         <param name="min">1</param> -->
         <param name="max">9999999</param> -->
         <message key="messages.validate.server.serverId.range"></message> -->
     </field-validator> -->
</field> 

 加上以上友好的国家化资源信息后,当转型失败后,后台返回的错误信息就是 "设备ID必须为数值类型," 加上 “messages.validate.server.serverId.requied” 对应的国家化资源信息了;嗯???

等等,什么情况?信息提示是没有问题了,但是进入了第一个验证了,是不能为空的验证。查看strut-default.xml发现struts框架本身的机制就是,先转型,转型失败后加载错误信息,然后继续验证。

这里问题就来了,我不想转型失败后还傻不拉几的去验证,有没有可能转型失败后不去验证呢?不可以,这是struts的机制决定的。

所以我想到了在xml中接收转型失败后的错误信息,并给出相应的例子提示信息,即:

<field name="model.serverId"> 
 	<field-validator type="conversion" short-circuit="true">
  		<message key="messages.numerical.examples"></message>
 	</field-validator>
       <field-validator type="required" short-circuit="true">
           <param name="trim">true</param> 
            <message key="messages.validate.server.serverId.requied"></message>
       </field-validator> -->
        <field-validator type="int" short-circuit="true">
            <param name="min">1</param> 
           <param name="max">9999999</param>
           <message key="messages.validate.server.serverId.range"></message> 
      </field-validator>
</field> -->

 国家化资源信息中加入:

messages.numerical.examples=如:0,11,202

猜你喜欢

转载自xulonghui2011.iteye.com/blog/1911599
今日推荐