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

    xiaoxiao2021-03-26  30

    一、表单数据的验证: 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方法并不会被校验。

    转载请注明原文地址: https://ju.6miu.com/read-662025.html

    最新回复(0)