【问题标题】:Re-enabled p:commandButton not firing ajax重新启用 p:commandButton 不触发 ajax
【发布时间】:2012-01-25 09:55:19
【问题描述】:

如果我启动了一个禁用的 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 primefaces


    【解决方案1】:

    您需要通过 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

    另见:

    【讨论】:

      猜你喜欢
      • 2012-01-06
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      相关资源
      最近更新 更多