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方法(分别)调用,则需要创建自定义拦截器。