重新启用p:commandButton不激活ajax

时间:2012-01-25 09:55:19

标签: jsf primefaces

如果我启动了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

有没有解决方案?

1 个答案:

答案 0 :(得分:4)

您需要通过JSF启用该按钮,而不是通过JavaScript / HTML DOM启用该按钮。在处理表单提交期间,JSF将在服务器端视图状态中验证是否启用了该按钮,作为防止篡改请求的一部分。

E.g。

<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

另见:

相关问题