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