struts2 xml 校验 小记2

本文探讨了Struts2框架中的验证机制,特别是在类型转换失败时如何调整验证流程以提供更友好的错误提示。通过使用特定的验证标签和国际化资源,可以定制错误消息并改善用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        相信很多的人都用过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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值