Seam:令牌标签未得到尊重

时间:2010-05-22 20:09:01

标签: jsf seam ajax4jsf

当我单击一个命令按钮,然后点击浏览器后退按钮到表单并再次单击它时,它会再次提交而不会抛出正确的异常......

更奇怪的是,当我回来时,表单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}" />
        &#160;
    <a4j:commandButton id="activateAccountButton"
        action="#{controller[agreeAction]}"
        image="/images/button-i-agree-continue.gif"
        styleClass="activate-account-button"
        reRender="#{reRenderList}"
        oncomplete="#{onActivationComplete}"/>
</h:form>

澄清:

  • 我继承了这个,所以我试图尽可能少地改变它。 (它在几个地方使用。)
  • 每个操作都返回一个视图,而不是null。我通过逐行逐步证实了这一点。
  • 在我当前的测试用例中,reRenderList为空。
  • onActivationComplete也是空的。

我将逐个模板地去看看是否有人用嵌套表格制作它,因为我的同事因此而产生了无关的问题,因此将其作为一个可能的问题消除也不会有什么坏处。

1 个答案:

答案 0 :(得分:2)

s:token应该通过在同一请求中多次单击提交按钮或通过刷新webbrowser中的非重定向结果或重新提交缓存来避免双/多提交浏览器历史记录中的页面。

当客户端按浏览器历史记录来回导航时,它可以正常工作,这意味着带有表单的页面缓存在客户端的浏览器历史记录中,并再次从服务器端请求为全新的。这确实会返回一个新的令牌。使用类似Firebug中的HTTP跟踪器自行检查。