【问题标题】:How to configure Struts 2.3 to accept both GET and POST parameters?如何配置 Struts 2.3 以接受 GET 和 POST 参数?
【发布时间】:2014-09-26 14:05:15
【问题描述】:

我们已从 2.0 迁移到 2.3。在 Struts 2.0 中,我们能够发送包含 post 和 get 参数的 AJAX 请求。但是在迁移到 Struts 2.3 之后,却无法执行此类请求。

这是使用 Prototype.js 发出的示例 AJAX 请求的样子:

var url = '/security/userdetails.action?mode=edit&userid=5';
var params = Form.serialize(form);
new Ajax.Request(url,
        {
            parameters: params,
            onSuccess: function(trans) {
                console.debug('success', trans);
            },
            onFailure: function(trans) {
                console.debug('failure', trans);
            },
            onException:function(trans) {
                console.debug('exception', trans);
            }
        });

如您所见,上述 AJAX 请求同时包含 GET 和 POST 请求。这在 2.0 中运行良好,但在 2.3 中,似乎请求已验证并且请求被转发到结果类型“输入”,但为此我们没有配置 JSP,最后我们得到的只是 404 Not Found 错误。

但是如果我们将代码更改为以下代码,它也可以在 Struts 2.3 中运行

var url = '/security/userdetails.action?mode=edit';    // ------ The Changes are here
var params = Form.serialize(form);
params.userid = 5;  // ----- And here
new Ajax.Request(url,
        {
            parameters: params,
            onSuccess: function(trans) {
                console.debug('success', trans);
            },
            onFailure: function(trans) {
                console.debug('failure', trans);
            },
            onException:function(trans) {
                console.debug('exception', trans);
            }
        });

第一种方法有什么问题? Struts 2.3 中是否有允许发出该请求的配置?

【问题讨论】:

  • 尝试调试验证失败的参数并得到输入结果。这是因为 Struts 2.3 配置的可能性很小。
  • @Yogi 如果我只使用 url,'/security/userdetails.action?mode=edit&userid=5' 并且不包含 post 参数,它可以工作。他们两个(获取和发布)分别工作。但是作为一个整体,他们没有。顺便说一句,有什么方法可以让输入结果类型设置什么验证消息?
  • 你的术语有点不对; Ajax 请求不“同时包含 GET 和 POST 请求”,它包含 URL 和请求正文中的参数。我不确定什么变化会影响到这一点,但是 S2.0 和 S2.3 之间的调度过程发生了很大变化。

标签: java ajax struts2 http-post url-parameters


【解决方案1】:

这取决于HttpServlet 是如何工作的,Struts2 使用哪种方法从请求中检索参数,以及在此期间使用的方法 GET/POST(不是两者)。 Struts2使用request.getParameterMap()获取参数

请求参数是随请求发送的额外信息。对于 HTTP servlet,参数包含在查询字符串或发布的表单数据中。

但是你使用的是http post方法,参数应该是post数据。

【讨论】:

  • 如果我使用 struts 2.0 罐子而不是 struts 2.3 的,它工作正常。
  • 所以我应该只使用 POST 或 GET,但不能同时使用?我不明白的是 '/security/userdetails.action?mode=edit' - GET 与 POST 参数一起工作,但 '/security/userdetails.action?mode=edit&userid=5' - GET 与 POST 一起不起作用。有什么不同?只是添加了一个正确的参数。
  • 如果您使用 GET 方法,则应在 url 中使用参数或使用 POST,然后使用表单数据,如果在使用 POST 时使用带参数的 url,则应从 url 获取该参数。你明白吗?不能同时使用 GET 和 POST 方法。
【解决方案2】:

事情是这样的:

userid 被定义为 action 类中的整数,因此显然它的 setter 和 getter 也是根据整数定义的

但是这个用户 ID 存在于 url(作为查询字符串)和帖子正文中 - 所以基本上是一个由两个字符串组成的数组。当 struts 尝试从数组中解析整数时,它会得到 numberformatexception -> 这会导致无效的表单提交,从而重定向到“输入”结果类型。

我没有看到 struts 在这件事上登录,因此偏离了实际问题。

感谢您的意见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2018-11-13
    • 2012-04-27
    • 2017-12-22
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多