前文:struts2:數據校驗,經過Action中的validate()方法實現校驗,圖解html
若是定義的Action中存在多個邏輯處理方法,且不一樣的處理邏輯可能須要不一樣的校驗規則,在這種狀況下,就須要經過Struts2框架提供的validateX()方法來準確校驗Action中的某一個方法,其中X表示處理邏輯的方法名。java
仍是之前的例子,換一種寫法,來講明validate()方法和validateX()方法的用法。框架
表單錄入頁面: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>
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
<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。測試
打開IE,輸入地址:http://127.0.0.1:8080/st/struts2/demo1/registerM.jspthis
結果以下:spa
直接提交,結果以下:
後臺顯示:
輸入正確的數據,再次提交,前臺顯示到成功頁面,後臺顯示:
注意:每次運行都是先調用validateLog方法,而後再調用validate方法(哪怕是validateLog方法已經出錯了)。校驗出錯時,使用函數addFieldError將錯誤信息key-value對放入到容器中,在JSP中再取出來顯示。