java之struts2之数据检验

2020-12-13 05:52

阅读:522

YPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

标签:输入   roman   lib   sage   lan   页面   error   his   success   

1.使用struts2时,有时候需要对数据进行相关的验证。如果对数据的要求比较严格,或对安全性要求比较高时,前端 js 验证还不够,

需要在后端再进行一次验证,保证数据的安全性。

2.struts2提供了两种机制来进行后端的数据验证。

  • 编程方式
  • 验证框架

3.通过编程方式来进行数据检验需要继承ActionSupport类。在ActionSupport类中有一个validate方法,在该方法中实现数据校验。如果要通过编程方式进行校验,那么需要在处理类的Action中重写validate方法。在action的执行方法中,先执行validate方法,再执行处理业务方法。

技术图片

4.实现案例

UserAction:

public class UserAction extends ActionSupport{
    private String name;
    private String pwd;
    private int age;
    /**
     * 在validate方法中 进行数据校验
     * 在validate方法中 如果没有添加错误信息,那么验证通过
     */
    public void validate() {
        System.out.println("执行validate方法");
        if(name==null||name.length()){
            //验证不通过
            this.addFieldError("name", "输入的用户名不合法");
        }
        if(pwd==null||pwd.length()){
            this.addFieldError("pwd", "输入的密码长度不合法");
        }
        if(age256){
            this.addFieldError("age", "输入的年龄不合法");
        }
        
    }
    @Override
    public String execute() throws Exception {
        System.out.println("执行execute");
        System.out.println("name="+name);
        System.out.println("pwd="+pwd);
        System.out.println("age="+age);
        return Action.SUCCESS;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

Struts.xml

 class="cn.sxt.action.UserAction">
       /add.jsp
       /success.jsp

Jsp

    pageEncoding="utf-8"%>数据校验
用户名:
密码:
年龄:

总结

实现 action 处理类中的数据校验有3个步骤

  1. 在处理类中重写validate方法,并将验证规则写在这个方法中
  2. 在action的配置中,加上结果为input的配置
  3. 在jsp页面中,需要使用struts2的标签显示错误信息

注意:web.xml中设置成 /* 的形式,要不然进不了action

5. 在struts2中通过validate方法来验证数据会有这样的问题:即,当一个Action中处理方法比较多时,所有的验证方法都放入validate中将会不合适。

如果有多个处理方法需要验证,那么需要为每个方法都添加其相应的验证方法。则为处理方法前加validate并且将处理方法首字母大写。如:处理方法为 add , 那么器验证方法为 validateAdd() ;这样在执行 add.action 时会先执行 validateAdd() ,再执行 validate() ,再执行add() ; 也就是说,当一个Action处理类中有多个处理方法时,需要分别为每个方法添加对应的验证方法。

技术图片

UserAction

public class UserAction extends ActionSupport{
    private String name;
    private String pwd;
    private int age;
    public void validateAdd(){
        System.out.println("执行validateAdd");
        if(name==null||name.length()){
            //验证不通过
            this.addFieldError("name", "输入的用户名不合法");
        }
        if(pwd==null||pwd.length()){
            this.addFieldError("pwd", "输入的密码长度不合法");
        }
        if(age256){
            this.addFieldError("age", "输入的年龄不合法");
        }
    }
    /**
     * 在validate方法中 进行数据校验
     * 在validate方法中 如果没有添加错误信息,那么验证通过
     */
    public void validate() {
        System.out.println("执行validate方法");
    }
    public String add() throws Exception {
        System.out.println("执行add");
        System.out.println("name="+name);
        System.out.println("pwd="+pwd);
        System.out.println("age="+age);
        return Action.SUCCESS;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

 

6. 由于验证数据的规则随着系统需求可能会发生变更。如果采用硬编码的方式来验证数据,那么规则发生改变时,需要从新编写代码。有可能会引入新的bug进入系统。这种方式不是很好,所以struts2除了编程验证外还提供了一种验证框架来进行数据校验。

 7. Struts2校验框架的使用:

  a) action所在包下提供一个验证配置文件即可,名称为actionName--validation.xml

  b) 在配置文件中需要为每个表单域提供验证规则

  c) 处理类要继承ActionSupport

验证规则:


true
            请输入用户名4
            10
            用户名在${minLength}到${maxLength}之间
true
            请输入密码6
            密码最少是6必须输入年龄1
            256
            年龄必须在1到256之间

上面struts2的校验框架知道即可

java之struts2之数据检验

标签:输入   roman   lib   sage   lan   页面   error   his   success   

原文地址:https://www.cnblogs.com/Vincent-yuan/p/11154682.html


评论


亲,登录后才可以留言!