struts2的输入校验+常用的校验器+基于XML实现的一些特性
输入验证的流程:
1. 类型转换器对请求参数执行类型转换,并把转换后的值赋给action的属性。
2. 如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,
conversionError拦截器将异常信息添加到fileErrors里。不管类型转换是否出现异常
,都会进入第3步。
3. 系统通过反射技术先调用action的validateXxx()方法,Xxx为方法名。
4. 在调用action的validate()方法。
5. 经过上面4步 ,如果在系统中的fieldErrors存在错误信息(即存放错误信息的集合
的size大于0),系统自动将请求转发至名称为input的视图 。如果系统中的fieldErrors
没有任何错误信息,系统将执行action中的处理方法。
对于输入校验struts2提供了两种实现
@手工编写代码实现
@基于配置XML的实现
1.手工编写代码实现对action中所有方法输入校验
通过重写validate()方法实现,validate方法会验证所有与execute方法签名相同的方法,当某个数据验证失败时,我们应该调用addFieldError()方法网系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action必须继承ActionSupport),如果系统的fieldErrors包含错误信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
public void validate() {//会对action中的所有方法校验if(this.username==null || "".equals(this.username.trim())){this.addFieldError("username", "用户名不能为空");}if(this.mobile==null || "".equals(this.mobile.trim())){this.addFieldError("mobile", "手机号不能为空");}else{if(!Pattern.compile("^1[358]\\d{9}$").matcher(this.mobile).matches()){this.addFieldError("mobile", "手机号格式不正确");}}}2.手工编写代码实现对action中指定方法输入校验 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <validators> <field name="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空!</message> </field-validator> </field> <field name="mobile"> <field-validator type="requiredstring"> <message>手机号不能为空!</message> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[^1[358]\d{9}$]]></param> <message>手机号格式不正确!</message></field-validator> </field></validators><field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空!</message></field-validator> <field-validator type="requiredstring"> <message>手机号不能为空!</message></field-validator><field-validator type="regex"> <param name="expression"><![CDATA[^1[358]\d{9}$]]></param> <message>手机号格式不正确!</message></field-validator><field-validator type="required"> <message>性别不能为空!</message></field-validator><field-validator type="stringlength"><param name="maxLength">10</param><param name="minLength">5</param><param name="trim">true</param><message><![CDATA[产品名称应在5-10个字符之间]]></message></field-validator><field-validator type="email"> <message>电子邮件地址无效</message></field-validator>