2017-07-17 62 views
0

struts 1在動作中定義默認方法嗎?即如果我有一些稱爲「註冊」的操作(使用與該方法相關的各種方法),那麼如果傳遞的方法未知,我可以默認爲一個certian方法嗎?在Struts動作中定義一個默認方法1

舉例來說,我有localhost:8000/register.do?method = processRegistration其中processRegistration是註冊操作中的一個方法。現在,如果我要導航到一個不存在的方法(即localhost:8000/register.do?method = foobar),它會向瀏覽器輸出一個堆棧跟蹤錯誤,並提供一個「NoSuchMethodException」。我的想法是嘗試和處理這種情況將是定義一個默認方法,在觸發異常的情況下運行。我不確定我的思路是否正確,但任何幫助,將不勝感激。謝謝!

回答

0

也許你需要創建一個錯誤頁面來隱藏堆棧跟蹤?如果是的話,那與struts無關。例如,在web.xml中定義一個自定義錯誤頁面。

如果你真的想這樣做,我猜你有這樣的事情:

public class RegisterAction extends DispatchAction { 

    public ActionForward processRegistrion(...) { 
     ... 
    } 
} 

DispatchAction拋出異常,從而延長DispatchAction和捕獲異常,併發送到默認的方法:

public abstract class MyDispatchAction extends DispatchAction { 

    public ActionForward execute(...) { 
     try { 
      return super.execute(...); 
     } catch (Exception e) { 
      return defaultMethod(...);   
     } 

    public abstract ActionForward defaultMethod(...); 

} 

和你的類現在「延伸MyDispacthAction and implements defaultMethod`:

public class RegisterAction extends MyDispatchAction { 

    public ActionForward processRegistrion(...) { 
     ... 
    } 

    public ActionForward defaultMethod(...) { 
     ... 
    } 

} 

但是defaultMethod實際上會做什麼?

0

如果您正在尋找另一種解決方案,您可以覆蓋DispatchAction的未指定方法。

public final class MyAction extends DispatchAction { 

    @Override 
    public ActionForward unspecified(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, 
     final HttpServletResponse response) throws Exception { 
    } 
} 

就我而言,我已經overrided的方法的getParameter太...爲了管理參數/方法的名稱(強制使用小寫)之間的情況。

相關問題