如何配置Struts 2.3接受GET和POST参数?

时间:2014-08-04 06:33:33

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

我们已从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中,似乎请求被验证并且请求被转发到结果类型“input”,但是为此我们没有配置JSP,最后我们得到的是404 Not Found Error。

但是如果我们将代码更改为以下代码,它也适用于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中是否有配置允许该请求?

2 个答案:

答案 0 :(得分:0)

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

  

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

但您使用的是http post方法,参数应该是post data。

答案 1 :(得分:0)

事情就是这样:

userid 被定义为动作类中的一个整数,因此很明显,setter和getter也是按整数定义的

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

我没有看到struts登录这件事并且偏离了实际问题。

感谢您提供的意见。