3

当我向浏览器提交表单时,表单被提交了两次。访问日志显示同时出现两个请求。两个不同的线程执行它。

问题是,第一个请求包含用户输入的属性值,而第二个请求调用仅包含请求对象中的空值。

并非所有时间都会出现此问题。它只是偶尔发生并且根本无法重现。在 IE8 和 IE9 中,我都遇到了这些问题。

有谁知道为什么会这样?

4

2 回答 2

5

也许问题是您正在使用提交按钮并document.forms[0].submit在 javascriptonclick事件处理程序中。

因此动作被调用了两次:

第一次由

document.forms[0].submit

第二次由

submit button action
于 2012-09-24T11:25:49.270 回答
1

你用struts1还是struts2?无论如何,它们都有避免重复提交的机制:token。对于struts1,你需要在第一个action(表单页面的action )中调用saveToken() ,struts的'html:form'标签会自动添加这个token到你的页面;在您的提交操作(处理表单的操作)中,调用isTokenValid(request, true),这将验证您的页面和会话中的令牌。

对于 struts2,为您的提交操作添加拦截器 ref 令牌,并在您的表单页面中添加 's:token' 标记。

上述解决方案限制了服务器端的重复提交,第二次请求将导致异常并作为无效请求处理。但是如果你想在 UI 端限制这个,你需要一些 javascript,比如:当你点击提交按钮时,禁用它以避免重复提交。

于 2012-06-18T11:19:36.107 回答