Struts2学习笔记7—Struts2数据验证机制。
1、手动验证的实现
private String username;
@Override
public String execute() throws Exception{
if(username==null||”".equals(username.trim())){
addFieldError(“username”,”用户名不能为空!”);
return INPUT;
}
return SUCCESS;
}
2、validate()方法的使用
public class UserAction extends ActionSupport{
private static final long serialVersionUID=1L;
private String username;
@Override
public String execute() throws Exception{
return SUCCESS;
}
public String reg() throws Exception{
return SUCCESS;
}
@Override
public void validate(){
if(“”.equals(username)){
addFieldError(“username”,”用户名不能为空!”);
}
}
….
}
UserAction重写了validate()方法,无论请求时由execute()方法进行处理,还是reg()方法进行处理,都会经过validate()方法进行验证。
如果一个Action对象中存在多个请求处理方法,而这些方法都需要经过同一个验证处理,就可以使用重写validate()方法进行实现。
可以为Action配置DefaultWorkflowInterceptor拦截器来指定、排除需要验证的方法:
<action name=”loginAction” class=”com.lyq.action.LoginAction”>
<interceptor-ref name=”defaultStack”>
<param name=”workflow.excludeMethods”>checkUser</param>
<param name=”workflow.includeMethods”>execute</param>
</interceptor-ref>
<result name=”input”>/login.jsp</result>
<result>/success.jsp</result>
</action>
其中拦截器配置参数workflow.excludeMethods用于指定排除验证的方法,参数workflow.includeMethods用于指定需要验证的方法。
3、Struts2验证框架
例如:应用Struts2框架对用户登录页面进行输入验证,UserAction-validation.xml:
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE validation 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”>
<message>请输入用户名</message>
</field-validator>
</field>
<!–验证密码–>
<field name=”password”>
<field-validator type=”requiredstring”>
<message>请输入密码</message>
</field-validator>
</field>
</validators>
验证文件UserAction-validation.xml必须放置在UserAction所在的包中。
UserAction-validation.xml是UserAction对象的验证文件,当执行UserAction对象时,Struts2会加载验证文件对UserAction中的内容进行验证处理。
4、验证文件的命名规则
1)ActionName-validation.xml方式命名
适用于:Action对象中只存在单一的处理方法或在多个请求处理方法中,验证处理的规则都相同。
2)ActionName-AliasName-validation.xml方式命名
适用于:Action对象中有多个请求处理方法,而只需对特定的请求处理方法进行验证。
5、Struts2的内置验证器
1)required验证器
<validator name=”required” class=”com.opensymphony.xwork2.validator.validators.RequiredFieldValidator”/>
用于验证输入的数据是否为null,如果数据值为null,则验证失败。
2)requiredstring验证器
<validator name=”requiredstring” class=”com.opensymphony.xwork2.validator.validators.RequiredFieldValidator”/>
用于验证输入的诗句是否为空的字符串,如果数据值为空的字符串”“,则验证失败。
包含一个boolean类型的参数trim,用于设置是否调用String类的String类的trim()方法去除输入字符串的首尾空字符,默认为true。
3)int验证器、long验证器、short验证器、double验证器、date验证器
<validator name=”int” class=”com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator”/>
用于验证输入的数据是否为整型、长整型、短整型、双精度浮点数值、日期型数值
参数:
min:用于设置参数的最小值; max:用于设置参数的最大值
double验证器有4个参数:minInclusive、 maxInclusive、 minExclusive、 maxExclusive
4)expression验证器
<validator name=”expression” class=”com.opensymphony.xwork2.validator.validators.ExpressionValidator”/>
根据值栈中的OGNL表达式进行验证,例如:
<validators>
<validator type=”expression”>
<param name=”expression”>password==confirmPassword</param>
<message>密码与确认密码必须相同</message>
</validator>
</validators>
5)fieldexpression验证器
<validator name=”fieldexrpession” class=”com.opensymphony.xwork2.validator.validators.FieldExpressionValidator”/>
根据OGNL表达式对字段进行验证,返回true则验证通过。
<validators>
<validator type=”fieldexpression”>
<param name=”filedName”>confirmPassword</param>
<param name=”expression”>password==confirmPassword</param>
<message>密码与确认密码必须相同</message>
</validator>
</validators>
6)email验证器
<validator name=”email” class=”com.opensy^mphony.xwork2.validator.validators.EmailValidator”/>
判断输入数据是否与以下正则表达式相匹配:
\\b(^['_A-Za-z0-9-]+(‘_A-Za-z0-9-]+)*@([A-Za-z0-9])+(\\A-Za-z0-9-]+)*((\\.[A-Za-z0-9]{2,})|(\\.[A-Za-z0-9]{2,}\\.[A-Za-z0-9]{2,}))$)\\b
7)url验证器
<validator name=”url” class=”com.opensy^mphony.xwork2.validator.validators.URLValidator”/>
8)conversion验证器
<validator name=”conversion” class=”com.opensy^mphony.xwork2.validator.validators.ConversionErrorValidator”/>
9)stringlength验证器
<validator name=”stringlength” class=”com.opensy^mphony.xwork2.validator.validators.StrigLengthFieldValidator”/>
验证输入的数据是否在指定的字符串长度之内。
10)regex验证器
<validator name=”regex” class=”com.opensy^mphony.xwork2.validator.validators.RegexFieldValidator”/>
4、数据类型转换器
1)配置转换器
自定义数据类型转换器要配置到xwork-conversion.properties中。
java.awt.Point=tag.PointConvertor
java.util.Locale=tutorial.LocaleConverter
2)在struts.xml中配置转换器
<action name=”HelloWorld” class=”tutorial.HelloWorld” convertor=”tutorial.convertor.DateTimeConvertor”>
<result>/HelloWorld.jsp</result>
</action>