【Struts2】【後臺輸入效驗】【validation攔截器】

原理:

後臺輸入效驗,是在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[]>.

在jsp顯示錯誤的信息:

    全部錯誤:<s:property value="fieldErrors"/><br>
    帳號的全部錯誤:<s:property value="fieldErrors.error_by_username"/><br>
    帳號的首個錯誤:<s:property value="fieldErrors.error_by_username[0]"/><br>

這裏寫圖片描述

發佈了73 篇原創文章 · 獲贊 12 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章