Struts2中validate數據校驗的兩種方法詳解附Struts2常用校驗器
1.Action中的validate()方法
Struts2提供了一個Validateable接口,這個接口中只存在validate()方法,實現(xiàn)這個接口的類可直接被Struts2調用,ActionSupport類就實現(xiàn)了Vadidateable接口,但他的validate()方法是一個空方法,需要我們來重寫。
validate()方法會在execute()方法執(zhí)行前執(zhí)行,僅當數據校驗正確,才執(zhí)行execute()方法, 如錯誤則將錯誤添加到fieldErrors域中,如果定義的Action中存在多個邏輯處理方法,且不同的處理邏輯需要不同的校驗規(guī)則,這種情況下validate()會對所有處理邏輯使用相同的校驗規(guī)則,為了實現(xiàn)不同的校驗邏輯,需要通過validateX()方法,其中X表示處理邏輯的方法名。
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包下創(chuàng)建驗證文件LoginAction-validation.xml,注:當一個Action中有多個業(yè)務處理方法是,命名規(guī)則為:actionName-methodName-validation.xml,其中actionName為Action類名,methodName為Action中某個業(yè)務處理方法的方法名,并且文件的搜索順序與方式一種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 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:
<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常用校驗器:

相關文章
Kotlin中使用Java數據類時引發(fā)的Bug解決方式
這篇文章主要介紹了Kotlin中使用Java數據類時引發(fā)的一個Bug,本文給大家分享問題解決方式,感興趣的朋友跟隨小編一起看看吧2023-09-09

