zoukankan      html  css  js  c++  java
  • struts2:数据校验,通过Action中的validate()方法实现校验(续:多业务方法时的不同验证处理)

    前文:struts2:数据校验,通过Action中的validate()方法实现校验,图解

    如果定义的Action中存在多个逻辑处理方法,且不同的处理逻辑可能需要不同的校验规则,在这种情况下,就需要通过Struts2框架提供的validateX()方法来准确校验Action中的某一个方法,其中X表示处理逻辑的方法名。

    还是以前的例子,换一种写法,来说明validate()方法和validateX()方法的用法。

    1. 创建前台JSP页面

    表单录入页面:registerM.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ page isELIgnored="false"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <head>
        </head>
        <body>
            <s:form action="registerM" method="post">
                账号:<s:textfield name="username"></s:textfield>${errors.username[0]}
                <br/>
                密码:<s:textfield name="password"></s:textfield>${errors.password[0]}
                <br/>
                年龄:<s:textfield name="age"></s:textfield>${errors.age[0]}
                <br/>
                身高:<s:textfield name="height"></s:textfield>${errors.height[0]}
                <br/>
                <s:submit method="log" value="提交"></s:submit>
            </s:form>
        </body>
    </html>

    注意:submit元素中的method属性为log,表示调用Action中的log方法,而不是默认的execute方法。

    提交成功后显示页面:success.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ page isELIgnored="false"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <body>
            success! :)
        </body>
    </html>

    2. 创建Action类

    package com.clzhang.struts2.demo1;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class RegisterMAction extends ActionSupport {
        public static final long serialVersionUID = 1;
    
        private String username;
        private String password;
        private Integer age;
        private Double height;
    
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        public Double getHeight() {
            return height;
        }
        public void setHeight(Double height) {
            this.height = height;
        }
        
        public void validateLog() {
            System.out.println("validateLog方法被调用...");
            
            if (!username.trim().equals("admin")) {
                this.addFieldError("username", "用户非法,必须为admin");
            }
    
            if (!password.trim().equals("pass1")) {
                this.addFieldError("password", "密码非法,必须为pass1");
            }
    
            if (age == null || age >= 110 || age < 0) {
                this.addFieldError("age", "年龄非法,必须为0到100之间");
            }
            if (height == null || height < 0 || height > 3) {
                this.addFieldError("height", "身高非法,必须为0到3米之间");
            }
        }
        
        public String log() {
            System.out.println("log method said:"+ username + "|" + age + "|" + height + " register finished!");
            
            return SUCCESS;
        }
        
        @Override
        public void validate() {
            System.out.println("validate方法被调用...");
        }
    
        public String execute() {
            System.out.println(username + "|" + age + "|" + height + " register finished!");
            
            return SUCCESS;
        }
    }

    注意:execute()方法对应验证方法为validate()方法;而log()方法对应的验证方法则为validateLog()方法。

    3. 修改struts.xml文件

            <action name="registerM" class="com.clzhang.struts2.demo1.RegisterMAction">
                <result name="success">/struts2/demo1/success.jsp</result>
                <result name="input">/struts2/demo1/registerM.jsp</result>
            </action>

    很简单,提交成功显示成功信息;数据不正确则返回到registerM.jsp。

    4. 测试

    打开IE,输入地址:http://127.0.0.1:8080/st/struts2/demo1/registerM.jsp

    结果如下:

    直接提交,结果如下:

    后台显示:

    输入正确的数据,再次提交,前台显示到成功页面,后台显示:

    注意:每次运行都是先调用validateLog方法,然后再调用validate方法(哪怕是validateLog方法已经出错了)。校验出错时,使用函数addFieldError将错误信息key-value对放入到容器中,在JSP中再取出来显示。

    更多阅读:

    struts2:数据校验,通过Action中的validate()方法实现校验,图解

    struts2:数据校验,通过XWork校验框架实现(validation.xml)

  • 相关阅读:
    韦大仙--Katalon---一款好用的selenium自动化测试插件
    Python之路,Day3
    Python之路,Day2
    Python之路,Day1
    Python基础02 基本数据类型
    Python基础01 Hello World!
    韦大仙--LoadRunner压力测试:详细操作流程
    韦大仙--python对文件操作 2--写入与修改
    韦大仙--python对文件操作
    更新pip10后 ImportError: cannot import name ‘main'
  • 原文地址:https://www.cnblogs.com/nayitian/p/3489536.html
Copyright © 2011-2022 走看看