如果我启动一个已禁用的命令按钮,即使重新启用该按钮后它也不会触发。
<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 还将在服务器端 View 状态中验证该按钮是否启用,作为防止篡改请求的一部分。
例如
<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
。
另请参阅:
关于jsf - 禁用的 JSF 命令按钮在通过 JavaScript 重新启用后不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9000669/