当我单击一个命令按钮,然后点击浏览器后退按钮到表单并再次单击它时,它会再次提交而不会抛出正确的异常......
更奇怪的是,当我回来时,表单id本身就是不同的,这意味着它在某些时候重新生成了“有效”的表单id。
以下是相关代码:任何想法?
<h:form id="accountActivationForm">
<s:token/>
<a4j:commandButton id="cancelActivateAccountButton"
action="#{controller[cancelAction]}"
image="/images/button-Cancel-gray.gif"
reRender="#{reRenderList}"
oncomplete="#{onCancelComplete}" />
 
<a4j:commandButton id="activateAccountButton"
action="#{controller[agreeAction]}"
image="/images/button-i-agree-continue.gif"
styleClass="activate-account-button"
reRender="#{reRenderList}"
oncomplete="#{onActivationComplete}"/>
</h:form>
澄清:
我将逐个模板地去看看是否有人用嵌套表格制作它,因为我的同事因此而产生了无关的问题,因此将其作为一个可能的问题消除也不会有什么坏处。
答案 0 :(得分:2)
s:token
应该通过在同一请求中多次单击提交按钮或通过刷新webbrowser中的非重定向结果或重新提交缓存来避免双/多提交1} em>浏览器历史记录中的页面。
当客户端按浏览器历史记录来回导航时,它可以正常工作,这意味着带有表单的页面不缓存在客户端的浏览器历史记录中,并再次从服务器端请求为全新的。这确实会返回一个新的令牌。使用类似Firebug中的HTTP跟踪器自行检查。