两次Struts动作 -

时间:2012-06-18 10:49:20

标签: java jsp struts request

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

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

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

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:4)

问题可能是您在javascript document.forms[0].submit事件处理程序中使用了提交按钮和onclick

因此,动作被调用两次:

第一次

document.forms[0].submit

第二次

submit button action

答案 1 :(得分:1)

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

对于struts2,为你的提交动作添加拦截器引用令牌,并添加' s:token'表单页面中的标记。

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

相关问题