引用这个问题,因为问题与我的问题相同,但我不认为该解决方案在我的情况下是可用的。
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中涉及的其他部分。
答案 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。