1.Action中的validate()方法
Struts2提供了一個Validateable接口,這個接口中只存在validate()方法,實現這個接口的類可直接被Struts2調用,ActionSupport類就實現了Vadidateable接口,但他的validate()方法是一個空方法,需要我們來重寫。
validate()方法會在execute()方法執行前執行,僅當數據校驗正確,才執行execute()方法, 如錯誤則將錯誤添加到fieldErrors域中,如果定義的Action中存在多個邏輯處理方法,且不同的處理邏輯需要不同的校驗規則,這種情況下validate()會對所有處理邏輯使用相同的校驗規則,為了實現不同的校驗邏輯,需要通過validateX()方法,其中X表示處理邏輯的方法名。
Action類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
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
1
2
3
4
5
6
7
8
9
|
< 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
1
2
3
|
<body> 登錄成功 <s:property value= "account" /> </body> |
validateLogin.jsp
1
2
3
|
<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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?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 name= "userName" > <field-validator type= "requiredstring" > <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> |
再次運行結果為:
上述字段校驗方式為字段校驗方式,還有一種方式是非字段校驗方式,如下:
Login-validation.xml:
1
2
3
4
5
6
7
8
9
10
|
<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常用校驗器:
原文鏈接:http://blog.csdn.net/woaigaolaoshi/article/details/50961505