0

引用这个问题是因为问题与我的相同,但我认为该解决方案不适用于我的情况。

连续按两次按钮

我有一个包含一系列需要填写和提交的表单的工作流,我想在用户单击“下一步”按钮后显示一个模式叠加层。为了显示这个覆盖,我需要让命令按钮使用 ajax。这会导致链接问题中描述的不良行为。

链接问题的解决方案似乎是“不要使用 Ajax 进行导航”,但我认为就我而言,我可能必须这样做才能显示这个等待对话。有没有其他方法可以保证下一页的视图状态会正确更新,这样当我继续导航时,我不需要点击两次按钮?

我正在使用 Primefaces 3.3.1。

<p:commandButton id="nextCommand" value="Next"
    action="#{backingBean.processInputAndDetermineOutcome}"
    onclick="waiter.show();" oncomplete="waiter.hide();">
    <f:param name="validate" value="true" />
</p:commandButton>

“验证”参数是我在自定义 BeanValidator 中使用的标志,以便我的“返回”按钮可以提交表单并更新模型,而无需处理任何验证。我认为这不会对这个问题产生任何影响,但我想我应该提到这个命令按钮中涉及的其他部分。

4

1 回答 1

1

您最好的选择是使用重定向导航。

public String processInputAndDetermineOutcome() {
    // ...

    return outcome + "?faces-redirect=true";
}

否则,如果您实际上只在 IE 浏览器中观察问题,而不是在其他更理智的浏览器中观察问题,那么您可能想尝试此处建议的 PrimeFaces 特定 JavaScript 修复:JSF Language switcher and ajax update

或者,如果您实际上是在 中<f:ajax>而不是在 中观察问题<p:ajax>,请尝试此处建议的特定于 JSF 的 JavaScript 修复:h:commandButton/h:commandLink 在第一次单击时不起作用,仅在第二次单击时起作用

于 2012-11-28T18:49:11.170 回答