struts2:數據校驗,經過Action中的validate()方法實現校驗(續:多業務方法時的不一樣驗證處理)

前文:struts2:數據校驗,經過Action中的validate()方法實現校驗,圖解html

若是定義的Action中存在多個邏輯處理方法,且不一樣的處理邏輯可能須要不一樣的校驗規則,在這種狀況下,就須要經過Struts2框架提供的validateX()方法來準確校驗Action中的某一個方法,其中X表示處理邏輯的方法名。java

仍是之前的例子,換一種寫法,來講明validate()方法和validateX()方法的用法。框架

1. 建立前臺JSP頁面

表單錄入頁面:registerM.jspjsp

<%@ 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方法。ide

提交成功後顯示頁面: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()方法。post

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.jspthis

結果以下:spa

直接提交,結果以下:

後臺顯示:

輸入正確的數據,再次提交,前臺顯示到成功頁面,後臺顯示:

注意:每次運行都是先調用validateLog方法,而後再調用validate方法(哪怕是validateLog方法已經出錯了)。校驗出錯時,使用函數addFieldError將錯誤信息key-value對放入到容器中,在JSP中再取出來顯示。

 

更多閱讀:

struts2:數據校驗,經過Action中的validate()方法實現校驗,圖解

struts2:數據校驗,經過XWork校驗框架實現(validation.xml)

相關文章
相關標籤/搜索