SSH框架之Struts的数据校验(1)

来源:互联网 发布:淘宝客转链工具app 编辑:程序博客网 时间:2024/05/17 01:36

一、表单数据的验证:
1、前台验证:主要是通过JS验证, 表达数据是否合法!
2、后台验证:通过后台java代码进行验证!
Struts也提供了数据效验的方式!

二、Struts数据效验:
1、通过拦截器完成:

<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>

2、ActionSupport源码支持:

三、Struts数据校验的四种形式:
1、代码方式验证Action中所有的方法。
2、代码方式验证Action中指定的方法。
3、XML方式验证Action中所有的方法。
4、XML方式验证Action中指定的方法。

四、代码方式验证Action中所有的方法:
1、Struts数据校验错误信息处理:
1)查看源码:

2)源码分析:

public synchronized void addFieldError(String fieldName, String errorMessage) {    // 1. 保存错误信息的map集合    final Map<String, List<String>> errors = internalGetFieldErrors();    // 2. Map的value值  (一个key,对应的多个值用list存储)    List<String> thisFieldErrors = errors.get(fieldName);    // 3. 如果错误信息的map中没有当前的key,就直接创建集合    if (thisFieldErrors == null) {        // 创建        thisFieldErrors = new ArrayList<String>();        errors.put(fieldName, thisFieldErrors);    }    // 4. 添加错误信息    thisFieldErrors.add(errorMessage);}

2、Action实现:

package sram.validation;import com.opensymphony.xwork2.ActionSupport;/** * 注意:如果要想用struts的数据校验功能,必须继承ActionSupport *      或实现相关接口 * @author mfq */public class UserAction extends ActionSupport{    //封装请求数据    private User user;    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }    //重写数据验证的方法    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() {        System.out.println(user);        return SUCCESS;    }    //业务方法:列表展示    public String list(){        return SUCCESS;    }}

五、代码方式验证Action中指定的方法:
1、引入:上述(第四大点)可以验证所有的方法,但是实际操作中并不是所有的方法都有验证的必要,如列表展示等。所以,为了做到这一点,引入了对指定方法的校验。

2、验证方法命名规则:validate + 要验证的方法名
如:

//只会验证当前action的register方法!public void validateRegister() {}

3、Action实现:

public void validateRegister() {    //用户名为空    if(user.getUserName() == null || "".equals(user.getUserName())){        //保存错误信息        super.addFieldError("userName", "用户名必须填写");    }    //密码    if(user.getPwd() == null || "".equals(user.getPwd())){        super.addFieldError("pwd", "密码必须填写");    }}

说明:用该方法替代之前(第四大点)的validate方法即可实现对指定方法(register)的校验,而list方法并不会被校验。

1 0