第一次接触struts2的校验框架,不算难。
今天看到两种用法:一是把校验文件放在action的相同目录下;二是action所在目录下放一个,和bean所在的目录下各放一个。
第二种等于能自己给校验的方法起名字,其实效果类似。
一:单个validation.xml的校验
在action的所在的包下,建一个:“action名称-方法名-validation.xml”
requiredstring是校验方法,是必须的
message提示信息
<validators>
<field name="user.firstname">
<field-validator type="requiredstring">
<message>错误提示信息:required first name</message>
</field-validator>
</field>
</validators>
因为action里聚合了private User user;
所以<field name 都是以“user.”开头的。
type="int"是校验的类型,这里是在一个数值区间之中
<field name="user.age">
<field-validator type="required">
<message>required age</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">130</param>
<message>age should be between ${min} and ${max}</message>
</field-validator>
</field>
二:action所在目录下和bean所在的目录下各放一个validation.xml
action包下的校验文件:
type="visitor"表名用visitor的校验方法
"context"是校验名称,这部分出现在第二个xml的文件名里
"appendPrefix">true<> 开启提示信息的开头部分
<validators>
<field name="user">
<field-validator type="visitor">
<param name="context">user</param>
<param name="appendPrefix">true</param>
<message>user's </message>
</field-validator>
</field>
</validators>
bean所在目录下的校验文件:
在bean里新建第二个校验xml
“bean名称-第一个校验xml中的校验名称-validation.xml”
<field name="firstname" 不再是user.,剩下都一样
<validators>
<field name="firstname">
<field-validator type="requiredstring">
<message>required first name</message>
</field-validator>
</field>
<field name="age">
<field-validator type="required">
<message>required age</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>age should be between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
三:输入改正的信息之后,表单不能提交
光这样用验证框架后,检查到输入错误后有个bug:就是输入改正之后再提交,错误信息一直重复出现,而且表单不能提交到action
原因上一篇文章分析过了,
是现在action现在由spring生成(而不是struts),
spring配置文件中action的bean不配置scope的时候,默认是单例,也就是说所有请求都是一个action处理,才会出问题
所以要配<bean id="saveUserAction" class="com.xxx.action.xxxAction" scope="prototype">
这样验证之后才能正确显示,修改之后才能马上正确提交