继续按两次命令按钮

时间:2012-11-28 16:17:38

标签: ajax jsf jsf-2 primefaces

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

continuation of pressing button twice

我有一个工作流程,其中包含一系列需要填写和提交的表单,我想在用户点击“下一步”按钮后显示模态叠加层。为了显示这个叠加层,我需要让命令按钮使用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>

“validate”参数是我在自定义BeanValidator中使用的标志,因此我的“后退”按钮可以提交表单并更新模型而不处理任何valdations。我不认为这会对这个问题产生任何影响,但我想我应该提一下这个commandButton中涉及的其他部分。

1 个答案:

答案 0 :(得分: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 does not work on first click, works only on second click