Struts2学习笔记7—Struts2数据验证机制



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>