Struts之数据校验与校验错误处理

一、数据校验

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>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值