原理:
後臺輸入效驗,是在Action類已經得到參數後,在使用參數前,判斷參數是否符合業務要求,不符合,跳轉到別的邏輯視圖
注意點:判斷時候要判斷是否爲空,防止空指針異常
輸入效驗的攔截器
- validation攔截器:
將錯誤原因存入fieldErrors中 - workflow攔截器
判斷fieldErrors是否有錯誤信息,若有,就return “input”;(默認邏輯視圖)
輸入效驗的使用(實現於Validateable)
jsp代碼
<%session.invalidate(); %>
<s:debug/>
<s:form action="/Login_login">
帳號<s:textfield name="user.username"/><br>
密碼<s:password name="user.password" /><br>
<s:submit value="do it"/>
</s:form>
1.對Action中多個方法需要輸入效驗
- @InputConfig(resultName=”login”):執行該方法前,判斷Fileerror或ActionError中是否有數據,若有,就跳轉到”login”的邏輯視圖;
- @SkipValidation:表示該方法不需要效驗.workflow攔截器放行
- 效驗方式
- 覆蓋方法
void validate();
- 在方法內寫
if(字段不符合要求,必須判斷不爲空,防止空指針異常)
{super.addFieldError("錯誤key", "錯誤value");}
- 覆蓋方法
public class LoginAction extends ActionSupport implements Validateable{
//自動獲取jsp的參數
private static final long serialVersionUID = 1L;
private User user=new User();
public User getUser() {
return user;
}
//輸入效驗,1.帳號不能爲空和null;2.密碼不能爲空且大於10(必須判斷不爲空,防止空指針異常)
public void validate{
if(!StringUtils.hasLength(user.getUsername())) {
super.addFieldError("error_by_username", "帳號不可以爲空");
}
if(user.getPassword()==null||user.getPassword().length()<10) {
super.addFieldError("error_by_password", "密碼長度大於10");
}
}
//處理登入信息存入session
@InputConfig(resultName="login")
public String login() throws Exception {
ActionContext ctx = ActionContext.getContext();
ctx.getSession().put("USER_IN_SESSION", user);
return "main";
}
//進入登入界面
@SkipValidation
public String execute() throws Exception {
return "login" ;
}
}
2.對Action中一個方法需要輸入效驗
- 免去輸入效驗的標籤
- 將validate方法名改爲validateLogin即可
public class LoginAction extends ActionSupport implements Validateable{
private User user=new User();
public User getUser() {
return user;
}
//更改方法名
public void validateLogin() {
if(!StringUtils.hasLength(user.getUsername())) {
super.addFieldError("error_by_username", "帳號不可以爲空");
}if(user.getPassword()==null||user.getPassword().length()<10) {
super.addFieldError("error_by_password", "密碼長度大於10");
}
}
//處理登入信息存入session
public String login() throws Exception {
ActionContext ctx = ActionContext.getContext();
ctx.getSession().put("USER_IN_SESSION", user);
return "main";
}
//進入登入界面
public String execute() throws Exception {
return "login" ;
}
}
3.在jsp頁面顯示錯誤信息
當不輸入密碼或不輸入帳號時候;回跳轉到”login”的邏輯視圖.並將fieldErrors存入Root區:
.
- fieldErrors是root區的key,其value是一個list;
- list裏面裝的是鍵值對,該鍵值對
<String,String[]>
.
- list裏面裝的是鍵值對,該鍵值對
在jsp顯示錯誤的信息:
全部錯誤:<s:property value="fieldErrors"/><br>
帳號的全部錯誤:<s:property value="fieldErrors.error_by_username"/><br>
帳號的首個錯誤:<s:property value="fieldErrors.error_by_username[0]"/><br>