如果我启动了commandButton禁用,即使重新启用按钮,AJAX事件也不会触发.
<p:commandButton id="btnAJAX" value="AJAX" widgetVar="btnAJAX" disabled="true" action="#{bean.neverReached()}"/> <p:commandButton id="btnEnabler" value="Enable" oncomplete="btnAJAX.enable()"/>
类似的问题在这里标识:http://forum.primefaces.org/viewtopic.php?f=3&t=7817
我使用的是primefaces 3.0.1和JDK 1.7
这有什么解决方案吗?
您需要通过JSF启用按钮,而不是通过JavaScript / HTML DOM启用.在处理表单提交期间,JSF将在服务器端视图状态中验证是否启用了按钮,作为防止篡改请求的一部分.
例如.
<p:commandButton id="btnAJAX" value="AJAX" action="#{bean.someAction}" disabled="#{!bean.enabled}" /> <p:commandButton id="btnEnabler" value="Enable" action="#{bean.enableButton}" process="@this" update="btnAJAX" />
同
private boolean enabled; public void enableButton() { enabled = true; } public boolean isEnabled() { return enabled; }
确保bean至少是@ViewScoped而不是@RequestScoped,否则按钮的操作仍然会失败,因为在表单提交请求期间重新创建了bean,因此enabled属性将成为默认值,即false.
也可以看看:
> commandButton/commandLink/ajax action/listener method not invoked or input value not updated