2012-11-28 81 views
0

引用此问题是因为问题与我的相同,但我不认为该解决方案适用于我的情况。继续按两次命令按钮

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> 

的“验证”参数是我使用一个自定义BeanValidator让自己的“后退”按钮提交表单,没有处理任何valdations的更新模型的标志。我认为这不会对这个问题产生任何影响,但我认为我应该提及这个commandButton中涉及的其他部分。

回答

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

+0

我其实没有在IE中试过这个,我看到的行为是在Firefox中。另外,我并没有特别添加ajax组件,而是使用带默认ajax行为的。但是,您添加faces-redirect = true参数的建议解决了我的问题。谢谢! – user1535568