1. 程式人生 > >Struts2中validate數據校驗的兩種常用方法

Struts2中validate數據校驗的兩種常用方法

red 有一種 資源文件 業務 相同 dna erp wrong 顯示

本文主要介紹Struts2中validate數據校驗的兩種方法及Struts2常用校驗器.

1.Action中的validate()方法

Struts2提供了一個Validateable接口,這個接口只有一個valudate()方法,只要類實現此接口name可以直接被Struts2調用,ActionSupport類就實現了Validateable接口,但是它並沒有重新validate()方法.

validate()方法會在execute方法執行前執行,去進行一些數據檢驗,當且僅當數據校驗正確的時候才會去執行execute()方法,如果錯誤則將錯誤添加到filedErrors域中.但是問題是如果一個action中有多個邏輯處理方法,且不同的處理邏輯需要不同的校驗規則,但是validate會對所有的處理邏輯使用相同的檢驗規則,為了解決這一問題,需要我們使用validateXxx()方法,其中Xxx表示處理邏輯的方法名.

Action類:

public class LoginAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private String userName;
private String userPassword;
public String execute(){
System.out.println("execute");
return SUCCESS;
}
public String login(){
System.out.println("login");
return SUCCESS;
}
public void validate(){ System.out.println("validata"); } public void validateLogin(){ System.out.println("validatelogin"); if(!(userName.equals("sbw") && userPassword.equals("123"))){ addFieldError("error","wrong info"); } } public String getUserName() { return userName; } public void setUserName(String userName) {
this.userName = userName; }public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } }

struts.xml

<package name="main" extends="struts-default">
<global-results>
<result name="login">/login.jsp</result>
</global-results>
<action name="loginPerson" class="com.sbw.test.action.LoginAction" 
method="login">
<result name="success">/success.jsp</result>
<result name="input">/validateLogin.jsp</result></action></package>

success.jsp

<body>登錄成功 <s:property value="account"/></body>

validateLogin.jsp

<body><s:fielderror/></body>

運行結果(第一次測試正確,第二次測試錯誤)

技術分享圖片

技術分享圖片

技術分享圖片

2.通過XWork校驗框架

使用validate方法校驗時,如果Web應用中存在大量Action就需要多次重寫validate方法,因此可以使用XWork的validator框架來對Struts2進行數據校驗,減少代碼量。

在com.action包下創建驗證文件LoginAction-validation.xml,註:當一個Action中有多個業務處理方法是,命名規則為:actionName-methodName-validation.xml,其中actionName為Action類名,methodName為Action中某個業務處理方法的方法名,並且文件的搜索順序與方式一種validate()和validateX()一樣。

Login-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.2//EN""http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">

<validators>
 //<field>: 為每一個需要校驗的字段添加一個驗證元素<field>,name屬性表示要校驗的字段名。
<field name="userName">
//<field-validator>: 使用該元素來指定校驗規則,type屬性為校驗規則名
<field-validator type="requiredstring">
// <message>: 使用該元素來指定校驗出錯時要顯示的標簽,key屬性指向資源文件中的標簽名
<message>the name should not null</message>
</field-validator>

</field><field name="userPassword">
<field-validator type="requiredstring">
<message>the password should not null</message>
</field-validator>
</field>
</validators>

該文件與Action類的class文件位於同一個路徑下.

再次運行結果為:

技術分享圖片

上述字段校驗方式為字段校驗方式,還有一種方式是非字段校驗方式,如下:

Login-validation.xml:

<validators>

<validator type="requiredstring">

<param name="fieldName">userName</param>

<message>name should not null</message>

</validator>

<validator type="requiredstring">

<param name="fieldName">userPassword</param>

<message>password should not null</message>

</validator>

</validators>

結果與字段校驗方式一樣

Struts2常用校驗器

技術分享圖片

Struts2中validate數據校驗的兩種常用方法