当View / Request作用域时,JSF actionListener不会被调用,但仅在Session时调用

时间:2016-01-25 17:56:36

标签: jsf-2 primefaces scope

给定:带有以下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. 当它是View或Request作用域但在Session作用域级别工作时,bean无法正常工作。

  5. 分析

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

    类似问题

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

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

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

1 个答案:

答案 0 :(得分:-1)

我做了以下事情来让事情发挥作用:

  1. 我制作了托管bean ViewScoped

  2. 我将保存按钮的disabled属性设置为一个简单的布尔值 领域。 (而不是由JSF或者解决的表达式 支持bean,我不知道这是否有问题)