Struts 2 支援 POJO 的程式撰寫,所以可以指定 Action Method 來執行您在 struts.xml 中的設定。

<action name="userLogout" method="logout" class="com.gu.EipLogin">
     <result>eip_home.jsp</result>
</action>

 

在 Action Class : com.gu.EipLogin 的程式段

    public String logout(){
        session.clear();
        System.out.println("logout method");
        return SUCCESS;
    }

 

加入 validate() 的  this.addFieldError(...) 或 this.addActionError(...) 後

    @Override
    public void validate() {
        // TODO Auto-generated method stub
        super.validate();
        boolean isInvalidError = false;
        if (isInvalid(getUserName())){
            this.addFieldError("userName", this.getText("userName.error") );
            isInvalidError = true;
        }
        if (isInvalid(getPassword())){
            this.addFieldError("password", this.getText("password.error") );
            isInvalidError = true;
        }
        if (isInvalidError){
            this.addActionError(getText("errors.general"));
        } else {
            session.put("userName", getUserName());
            session.put("login", true);
        }
    }

 

卻發生了錯誤訊息:

Struts Problem Report

Struts has detected an unhandled exception:

Messages:
  • No result defined for action com.gu.EipLogin and result input

 

原因是 Struts 2 進入 Action 時,會先作 validate() ,沒有錯誤後才會執行後續的 method 如: execute()....等,若有錯誤則返回 <result name="input">...</result>; 所以當要執行指定的 method : logout() 前,發生了錯誤會返回預設的 <result name="input">...</result>,但我們又沒有指定,所以才會發生錯誤。

解決的方法是在 logout 的 method 上加入annotation: @SkipValidation ,指示此 method : logout() 不需作 validate() 即可。

    @SkipValidation
    public String logout(){
        session.clear();
        System.out.println("logout method");
        return SUCCESS;
    }

 

 

arrow
arrow

    MIS 發表在 痞客邦 留言(0) 人氣()