• java之struts2之数据检验


    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()<4){
                //验证不通过
                this.addFieldError("name", "输入的用户名不合法");
            }
            if(pwd==null||pwd.length()<6){
                this.addFieldError("pwd", "输入的密码长度不合法");
            }
            if(age<0||age>256){
                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

     <action name="add" class="cn.sxt.action.UserAction">
           <result name="input">/add.jsp</result>
           <result>/success.jsp</result>
      </action>

    Jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>数据校验</title>
    </head>
    <body>
    
    <form action="add.action" method="post">
    用户名:<input type="text" name="name"/><s:fielderror fieldName="name"></s:fielderror><br>
    密码:<input type="password" name="pwd"/><s:fielderror fieldName="pwd"></s:fielderror><br>
    年龄:<input type="text" name="age"/><s:fielderror fieldName="age"></s:fielderror><br>
    <input type="submit" value="提交"/>
    </form>
    </body>
    </html>

    总结

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

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

    注意: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()<4){
                //验证不通过
                this.addFieldError("name", "输入的用户名不合法");
            }
            if(pwd==null||pwd.length()<6){
                this.addFieldError("pwd", "输入的密码长度不合法");
            }
            if(age<0||age>256){
                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

    验证规则:

    <validators>
        <!-- 一个field表示验证一个表单域 -->
        <field name="name">
            <!-- 
            field-validator 表示验证器  struts2提供了很多默认的验证器
             -->
            <field-validator type="requiredstring">
                <param name="trim">true</param>
                <message>请输入用户名</message>
            </field-validator>
            <field-validator type="stringlength">
                <param name="minLength">4</param>
                <param name="maxLength">10</param>
                <message>用户名在${minLength}到${maxLength}之间</message>
            </field-validator>
        </field>
        <field name="pwd">
            <field-validator type="requiredstring">
                <param name="trim">true</param>
                <message>请输入密码</message>
            </field-validator>
            <field-validator type="stringlength">
                <param name="minLength">6</param>
                <message>密码最少是6</message>
            </field-validator>
        </field>
        <field name="age">
            <field-validator type="required">
            <message>必须输入年龄</message>
            </field-validator>
            <field-validator type="int">
                <param name="min">1</param>
                <param name="max">256</param>
                <message>年龄必须在1到256之间</message>
            </field-validator>
        </field>
    </validators>

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

  • 相关阅读:
    AJ学IOS 之微博项目实战(10)微博cell中图片的显示以及各种填充模式简介
    AJ学IOS 之微博项目实战(9)微博模型之时间相关重要操作,判断刚刚,昨天,今年等等
    AJ学IOS 之控制器view显示中view的父子关系及controller的父子关系_解决屏幕旋转不能传递事件问题
    AJ学IOS 之UIDynamic重力、弹性碰撞吸附等现象
    AJ学IOS 之CoreLocation反地理编码小Demo输入经纬度得到城市
    AJ学IOS 之CoreLocation地理编码小Demo输入城市得到经纬度
    AJ学IOS 之CoreLocation指南针小应用
    AJ学IOS 之CoreLocation基本使用
    AJ学IOS 之第一次打开Xcode_git配置,git简单学习
    AJ学IOS 之微博项目实战(8)用AFNetworking和SDWebImage简单加载微博数据
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/11154682.html
Copyright © 2020-2023  润新知