2010-07-13 61 views
1

時間又一個愚蠢的問題,增加了他們的一長串。Struts 2的行動方法

我是Struts 2的新手,花了好幾年的時間使用舊的1.X. Struts 2的操作可以大致等同於Struts 1 DispatchActions,只需添加方法(並在struts.xml中定義它們)即可。

因此,假設我有這樣的方法:

public String create() throws Exception { 
    // insert create logic here 
} 

我想是有創造()完成雙重任務。如果調用create()而不傳遞任何參數,它將返回INPUT(並顯示JSP表單頁面),否則它將處理表單數據並返回SUCCESS(並顯示默認頁面)。

我現在唯一的方法是檢查並查看請求中是否有值,這對我來說似乎很愚蠢。如果我可以說「如果我通過HTTP GET調用這個窗體,如果我通過HTTP POST調用它,那麼進程會重定向到默認窗體」。

就像我說的,我可能在這裏很愚蠢,但任何幫助將不勝感激。

回答

1

你在找什麼是使用相同的行動來顯示錶單,然後(在提交後)處理表單。

public class MyAction { 
    @SkipValidation 
    public String execute() throws Exception { 
     return INPUT; // shows the form 
    } 

    public void validate() { 
     // do your validations here... 
    } 

    public String submit() throws Exception { 
     // process the form 
     // redirect somewhere 
    } 
} 

如果你的動作被映射爲「myaction」,那麼你的表格應提交給「myaction!提交」(這是動態方法調用,它調用你的submit()法)。

如果您想強制executesubmit方法僅通過HTTP GET和POST方法(分別)調用,則需要創建自定義攔截器。