当我向浏览器提交表单时,表单被提交了两次。访问日志显示同时出现两个请求。两个不同的线程执行它。
问题是,第一个请求包含用户输入的属性值,而第二个请求调用仅包含请求对象中的空值。
并非所有时间都会出现此问题。它只是偶尔发生并且根本无法重现。在 IE8 和 IE9 中,我都遇到了这些问题。
有谁知道为什么会这样?
也许问题是您正在使用提交按钮并document.forms[0].submit
在 javascriptonclick
事件处理程序中。
因此动作被调用了两次:
第一次由
document.forms[0].submit
第二次由
submit button action
你用struts1还是struts2?无论如何,它们都有避免重复提交的机制:token。对于struts1,你需要在第一个action(表单页面的action )中调用saveToken() ,struts的'html:form'标签会自动添加这个token到你的页面;在您的提交操作(处理表单的操作)中,调用isTokenValid(request, true),这将验证您的页面和会话中的令牌。
对于 struts2,为您的提交操作添加拦截器 ref 令牌,并在您的表单页面中添加 's:token' 标记。
上述解决方案限制了服务器端的重复提交,第二次请求将导致异常并作为无效请求处理。但是如果你想在 UI 端限制这个,你需要一些 javascript,比如:当你点击提交按钮时,禁用它以避免重复提交。