close
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 ReportStruts has detected an unhandled exception:
|
原因是 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; } |
文章標籤
全站熱搜
留言列表