java - struts2中通过GET或POST控制action的方法

标签 java jsp struts2

我是 Struts2 的新手,来自 PHP 背景,我经常使用相同的文件处理 GET 和 POST 请求,并在请求是 POST 请求时处理表单。

我目前在 struts.xml 中有以下内容:

<action name="ProcessData" class="ProcessDataAction">
    <result name="*">processdata.jsp</result>
</action>
<action name="ProcessDataUpload" class="ProcessDataAction" method="upload">
    <result name="*">processsdata.jsp</result>
</action>

这很好用,但令我困扰的是处理 POST 的 URL 不同,因为现在如果用户重新加载页面,他们会收到错误消息,而不是简单地看到 GET 页面的内容。

所以我的问题是,有没有办法告诉 struts2 如果是 GET 请求就调用一个方法,如果是 POST 请求就调用另一个方法?

最佳答案

Struts2 不提供您所描述的开箱即用的功能。如果您想强制特定操作方法只能由某些 HTTP 方法调用,那么您需要创建一个自定义拦截器,可能还需要创建一些自定义注释。

如果您只想使用相同的操作来处理显示和处理表单,那么您可以执行以下操作:

public class MyAction {
  public String execute() {
    return INPUT;
  }

  public void validate() {
    // perform any form validation needed
  }

  public String submit() {
    // process the form and then redirect
  }
}

在您的表单中,您将提交给 ProcessData!submit。这 !将操作与操作方法名称分开。它提供了您已有的功能,但您不需要显式映射 struts.xml 中的每个方法。

But it bothers me that the URL that handles POST is different, since now if the user reloads the page, they get an error rather than simply seeing the contents of the GET page.

在成功发布后重定向用户完全抵消了这一点。查看“发布后重定向”或“发布/重定向/获取”模式)。

关于java - struts2中通过GET或POST控制action的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7338782/

相关文章:

java - 如何在任何类上执行 SELECT 语句

Java Android - 过滤传入的短信

java - JasperException - 即使存在标记也找不到文件

java - 启用约定插件会破坏 xml 映射

java - 他们可以将Javascript变量分配或获取到java变量吗?

mysql - 带有 JSTL 的存储过程 <sql :query> tag

java - 使用 Struts 2 标签将 java 方法的值传递给 javascript 变量

java - 如何使用由不同类加载器实例化的对象

Java 不可变对象(immutable对象)

java - 清空分隔字符串中某些字段的最快方法是什么?