对于输入校验 struts2提供了2中实现方法。
首先普及一下知识:
输入校验的流程:
1.类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
2.如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管类型转换是否出现异常,都会进入第3部。
3.系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
4.在调用action中的validate()方法。
5.经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。
一、采用手工编写代码实现。
通过重写validate()方法实现,validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,调用addFileldError()方法往系统的fileldError添加检验失败信息(为了使用addFiledError()方法,action必须继承ActionSupport),如果系统的fileldError包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
(1) 对所有方法进行校验:
public void validate)(){ if(this.phone==null||””.equals(this.phone.trim())) { this.addFieldError( “username”,”手机号不能为空!”); } }else{ if(!Pattern.compile(“^1[358]\\d{9}”).matches(this.phone.trim()).matches()) { this.addFieldError(“phone”,”手机号的格式不正确”);} } } |
(2) 对特定方法校验:
通过重写validateXxx()方法实现,validateXxx()方法只会校验action中Xxx方法。(注意:Xxx的第一个字母要大写。)同上
public void validateLogin(){ If(name==null||””.equals(name.trim())) this.addFieldError(“name”,”用户名不能为空!”); } |
验证失败后,请求转发至input视图:
<result name=”input”>/WEB-INF/page/login.jsp</result>
在login.jsp页面中使用<s:fielderror/>显示失败信息。
二、基于XML配置方式的实现。
使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和acton类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml,注意:ActionClassName为action的简单类名,-validation为固定写法,例如:Action类为cn.com.AdmAction.那么该文件的取名应为:AdmAction-validation.xml。
举例说明一下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators> <!--validator声明required验证器,属性type指示了验证器的类型,参数fieldName指示了所有验证的Action属性,子元素message给出了验证失败时的错误信息。——> <validator type=”required”> <param name=”fieldName”>title</param> <message>留言主题不能为空!</message> </validator> <!--field声明required验证器,属性name指示了所要验证的Acton属性,子元素field-validator的属性type指示了验证器的类型,子元素message给出了验证失败时的错误信息--> <field name=”title”> <field-validator type=”required”> <message>留言主题不能为空值!</message> </field-validator> </field> </validators> |
校验器的定义可以在xwork-2.x.jar中的com.opensymphony-xwork2.validator.validators下的default.xml中找到
常用的校验器举例:
required:必填校验器
requireding:必填字符串校验器
(其中:required 和requireding 校验器的区别在于:required要求的是一个对象不能为null,它可以验证像Date类型的对象,而requiredstring只是对字符串做限制)
stringlength :字符串长度校验器
<field-validator type=”stringlength ”> <param name=”maxLength”>18</param><!--对最大长度进行校验--> <param name=”minLength”>6</param><!--对最小长度进行校验--> <param name=”trim”>true</param> <message><![CDATA[输入的长度应在6-18个字符之间!]]></message> </field-validator> |
regex :正则表达式校验器(其中expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)
<field-validator type=”regex”> <param name=”expression”><![CDATA[^1[358]\d{9}$]]></param> <message>不是正确的手机号格式!</message> </field-validator> |
int :整数校验器
url :网址校验器
date :日期校验器
email : 邮件地址校验器