一、数据校验
1.手动编码(继承ActionSupport重写拦截器validate方法)繁琐
(1)数据校验Struts2提供的拦截器
<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
(2)手动编码校验器--针对xxxAction中所有方法进行校验
public class UserAction extends ActionSupport {
// 封装请求数据
private User user = new User();
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
// 重写数据验证的方法
@Override
public void validate() {
// 用户名非空
if (user.getUsername() == null || "".equals(user.getUsername())) {
// 保存错误信息
super.addFieldError("username", "用户名不能为空!");
}
// 密码
if (user.getPwd() == null || "".equals(user.getPwd())) {
super.addFieldError("pwd", "密码不能为空!");
}
}
public String register(){
return "success";
}
}
(3)手动编码校验器--针对xxxAction中指定方法进行校验 将validate()名称为validateXxx()其中Xxx为你要验证的方法
public class UserAction extends ActionSupport {
// 封装请求数据
private User user = new User();
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
public String addUser() throws Exception{
//....
}
public String register() throws Exception{
//....
}
//想要对此方法进行校验
public String login() throws Exception{
...
}
// 针对指定方法进行校验
@Override
public void validateLogin() {
// 用户名非空
if (user.getUsername() == null || "".equals(user.getUsername())) {
// 保存错误信息
super.addFieldError("username", "用户名不能为空!");
}
// 密码
if (user.getPwd() == null || "".equals(user.getPwd())) {
super.addFieldError("pwd", "密码不能为空!");
}
}
}
2.XML配置(利用Struts2提供的常用的验证器)单个属性Action中需要提供其get方法
(1) Struts2提供的常用的验证器
Struts提供的所有验证器位于xwork-core-2.3.4.1.jar/com.opensymphony.xwork2.validator.validators/default.xml
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
(2) 配置自己需要的验证器(--针对xxxAction中所有方法进行校验)
条件:在Action所在包下创建一个与Action类名相同的名字加后缀-validation.xml
例子:UserAction-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>
<!-- 验证的每一个字段用field表示 -->
<field name="user.userName">
<!-- 指定使用的验证器 -->
<field-validator type="requiredstring">
<!-- 验证失败的错误提示信息 -->
<message>用户名不能为空!</message>
</field-validator>
</field>
<!-- 验证pwd -->
<field name="user.pwd">
<!-- 非空 -->
<field-validator type="requiredstring">
<message>密码不能为空!</message>
</field-validator>
<!-- 长度 -->
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">8</param>
<message>密码必须为6-8位!</message>
</field-validator>
</field>
<!-- 验证日期 -->
<field name="user.birth">
<field-validator type="date">
<message>日期格式不对!</message>
</field-validator>
</field>
<!-- 验证Email -->
<field name="user.email">
<field-validator type="email">
<message>邮箱格式错误!</message>
</field-validator>
</field>
</validators>
(3) 配置自己需要的验证器(--针对xxxAction中指定方法进行校验)
条件
在Action所在包下创建一个与Action类名相同的名字加后缀-要访问的方法对应的action的名称加后缀-validation.xml
<action name="login" class="com.mark.demo.UserAction" method="loginPri"/>
例子UserAction-login-validation.xml
3.XML配置(自定义验证器)
(1)继承FieldValidatorSupport --校验的时候针对一个字段(如年龄)
public class MyValidate extends FieldValidatorSupport{
public void validate(Object obj) throws ValidationException {
//获取字段名称
String name = super.getFieldName();
//获取字段值
String value = super.getFieldValue(name, obj).toString();
if(value instanceof Integer){
int age = (Integer) value;
if(age < 0){
super.addFieldError(name, obj);
}
}
}
}
(2)注册自定义验证器(在src类路径下创建validators.xml文件)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Config 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
<validators>
<validator name="age" class="com.mark.demo.MyValidate "/>
</validators>
(3) 使用自定义验证器(我们还是在上例中的UserAction-validation.xml 中使用新加入的验证器)
<validators>
<!-- 验证的每一个字段用field表示 -->
<field name="user.age">
<!-- 指定使用新加入的验证器 -->
<field-validator type="age">
<!-- 验证失败的错误提示信息 -->
<message>年龄不能为负数!</message>
</field-validator>
</field>
<validators>
二、校验错误处理
1.Action级别(this.addActionError(anErrorMessage))
<!--页面显示错误信息-->
<s:actionerror cssStyle="color:red"></s:actionerror>
2.字段级别(this.addFieldError(fieldName, errorMessage))
<!--页面显示错误信息-->
<s:fielderror cssStyle="color:red"></s:fielderror>