1.类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性
2.如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管类型转换是否出现异常,都将进入第三步。
3.系统通过反射技术先调用action中的validateXxx()方法
4.再调用action中的validate()方法
5.经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发到名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法
注:如发送请求后进入input视图,并不一定是验证失败,如果类型转换出现异常,也将进入input视图
正则表达式验证如下,注 意验证框架的XML文件中如下写:
<field name="sno">
<field-validator type="regex">
<param name="trim">true</param>
<param name="expression"><![CDATA[(\d{8})]]></param>
<message>学号必须为8位数字!</message>
</field-validator>
</field>
field-validator的type具体查看xwork包下的com\opensymphony\xwork2\validator \validators
下default.xml文件,然后在xwork源代码中(需单独下载)找到相应的处理类,param即该类的属性
intege:"^-?[1-9]\\d*$", //整数
intege1:"^[1-9]\\d*$", //正整数
intege2:"^-[1-9]\\d*$", //负整数
num:"^([+-]?)\\d*\\.?\\d+$", //数字
num1:"^[1-9]\\d* ¦0$", //正数(正整数 + 0)
num2:"^-[1-9]\\d* ¦0$", //负数(负整数 + 0)
decmal:"^([+-]?)\\d*\\.\\d+$", //浮点数
decmal1:"^[1-9]\\d*.\\d* ¦0.\\d*[1-9]\\d*$", //正浮点数
decmal2:"^-([1-9]\\d*.\\d* ¦0.\\d*[1-9]\\d*)$", //负浮点数
decmal3:"^-?([1-9]\\d*.\\d* ¦0.\\d*[1-9]\\d* ¦0?.0+ ¦0)$", //浮点数
decmal4:"^[1-9]\\d*.\\d* ¦0.\\d*[1-9]\\d* ¦0?.0+ ¦0$", //非负浮点数(正浮点数 + 0)
decmal5:"^(-([1-9]\\d*.\\d* ¦0.\\d*[1-9]\\d*)) ¦0?.0+ ¦0$", //非正浮点数(负浮点数 + 0)
email:"^\\w+((-\\w+) ¦(\\.\\w+))*\\@[A-Za-z0-9]+((\\. ¦-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$", //邮件
color:"^[a-fA-F0-9]{6}$", //颜色
url:"^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$", //url
chinese:"^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$", //仅中文
ascii:"^[\\x00-\\xFF]+$", //仅ACSII字符
zipcode:"^\\d{6}$", //邮编
mobile:"^(13 ¦15)[0-9]{9}$", //手机
ip4:"^(\\d{1,2} ¦1\\d\\d ¦2[0-4]\\d ¦25[0-5]).(\\d{1,2} ¦1\\d\\d ¦2[0-4]\\d ¦25[0-5]).(d{1,2} ¦1\\d\\d ¦2[0-4]\\d ¦25[0-5]).(\\d{1,2} ¦1\\d\\d ¦2[0-4]\\d ¦25[0-5])$", //ip地址
notempty:"^\\S+$", //非空
picture:"(.*)\\.(jpg ¦bmp ¦gif ¦ico ¦pcx ¦jpeg ¦tif ¦png ¦raw ¦tga)$", //图片
rar:"(.*)\\.(rar ¦zip ¦7zip ¦tgz)$", //压缩文件
date:"(([0-9]{3}[1-9] ¦[0-9]{2}[1-9][0-9]{1} ¦[0-9]{1}[1-9][0-9]{2} ¦[1-9][0-9]{3})-(((0[13578] ¦1[02])-(0[1-9] ¦[12][0-9] ¦3[01])) ¦((0[469] ¦11)-(0[1-9] ¦[12][0-9] ¦30)) ¦(02-(0[1-9] ¦[1][0-9] ¦2[0-8])))) ¦((([0-9]{2})(0[48] ¦[2468][048] ¦[13579][26]) ¦((0[48] ¦[2468][048] ¦[3579][26])00))-02-29), //日期
qq:"^[1-9]*[1-9][0-9]*$", //QQ号码
tel:"(\\d{3}- ¦\\d{4}-)?(\\d{8} ¦\\d{7})", //国内电话
username:"^\\w+$", //用来用户注册。匹配由数字、26个英文字母或者下划线组成的字符串
letter:"^[A-Za-z]+$", //字母
letter_u:"^[A-Z]+$", //大写字母
letter_l:"^[a-z]+$", //小写字母
idcard:"^[1-9]([0-9]{14} ¦[0-9]{17})$" //身份证