当disabled属性为false时,不调用commandButton actionListener

时间:2016-01-20 16:16:26

标签: jsf jsf-2 primefaces

给定:带有以下xhtml

的primefaces 5.3应用程序
    <h:form id="form" enctype="multipart/form-data">
        <p:messages id="serversMessages" showDetail="true" autoUpdate="true" closable="true" />

        <p:selectOneListbox value="#{servers.model.selectedServer}" style="min-width:300px">
            <p:ajax event="change" listener="#{servers.onServerSelected}" update=":form" />
            <f:selectItems value="#{servers.model.servers}" var="srv" itemValue="#{srv.serverInfoId}" itemLabel="#{srv.name}" />
        </p:selectOneListbox>

        <p:column><p:inputText value="#{servers.model.edit.name}" /></p:column>
        <p:commandButton id="newServerBtn" actionListener="#{servers.onNewServerClicked}" value="New" update=":form"></p:commandButton>
        <p:commandButton id="updServerBtn" disabled="#{empty servers.model.selectedServer}" actionListener="#{servers.onSaveClicked}" value="Save" update=":form"></p:commandButton>
        <p:commandButton id="tmpServerBtn" actionListener="#{servers.onTempClicked}" value="Temp2" update=":form"></p:commandButton>

    </h:form>   

何时:我点击了updServerBtn(当选择了列表中的项目时启用了它)

期望:将调用辅助bean方法。

但实际上:不会调用辅助bean方法。

观察

  1. 如果我删除了disabled属性,则会调用辅助bean。

  2. tmpServerBtn调用支持bean方法。

  3. 当我点击updServerBtn时,XHR会发生200响应。

  4. 分析

    似乎Primefaces决定调用支持bean方法是不值得的。

    类似问题

    在发布我的问题之前,我确实在这里找到了这篇文章:

    commandButton/commandLink/ajax action/listener method not invoked or input value not updated

    当我删除updServerBtn的disabled属性时,会调用支持bean方法 。这告诉我,上述帖子中出现问题的可能原因可能并不适用。

1 个答案:

答案 0 :(得分:-1)

我想您的问题是,当您从selectOneListBox中选择服务器时,您的按钮不会更新,因此不会重新计算已禁用的属性。

尝试更改update更改事件的<p:ajax>属性。而不是更新:form尝试更新@form