Jsf 2 JSF actionListener不在视图/请求范围内调用,而仅在会话

Jsf 2 JSF actionListener不在视图/请求范围内调用,而仅在会话,jsf-2,primefaces,scope,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.se

给定:具有以下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方法

但实际上:没有调用backingbean方法

意见:

如果删除disabled属性,则调用支持bean

tmpServerBtn调用支持bean方法

当我单击updServerBtn时,会出现一个带有200响应的XHR

bean在视图或请求范围内时不能正常工作,但在会话范围内工作

分析:

似乎Primefaces决定调用backingbean方法是不值得的

类似问题

在发布我的问题之前,我确实在这里找到了以下帖子:


当我删除updServerBtn的disabled属性时,会调用backingbean方法。这对我来说意味着,上述帖子中出现问题的可能原因可能并不适用。

我做了以下几点来让事情顺利进行:

我将托管bean设置为ViewScope

我将save按钮的disabled属性设置为一个简单的布尔值 领域而不是JSF或 比恩,我不知道这是否重要


我做了以下几件事来让事情顺利进行:

我将托管bean设置为ViewScope

我将save按钮的disabled属性设置为一个简单的布尔值 领域而不是JSF或 比恩,我不知道这是否重要


我上周提交了这个问题,它被标记为现有问题的副本,但是我觉得情况并非如此。您是否正确导入了@ViewScoped?当前应用程序使用javax.faces.bean包中的作用域注释。并且您的托管bean是@ManagedBean?因此,您的视图作用域托管bean会在每个请求上重新构建,只需在postconstruct中放置调试断点进行验证,它的行为基本上类似于请求范围的行为?这是一个不同的问题:您实际上没有使用该重复中回答的视图范围bean。我上周提交了这个问题,它被标记为现有问题的重复,但是我觉得情况并非如此。您是否正确导入了@ViewScoped?当前应用程序使用javax.faces.bean包中的作用域注释。并且您的托管bean是@ManagedBean?因此,您的视图作用域托管bean会在每个请求上重新构建,只需在postconstruct中放置调试断点进行验证,它的行为基本上类似于请求范围的行为?这是一个不同的问题:您实际上并没有使用视图范围的bean,这在dupe中得到了回答。什么是简单的布尔字段?似乎你在不知道自己做了什么的情况下“修复”了某件事。在这种情况下,这个Q和A对其他人来说是完全无用的,至少A是。您的问题就像上面最后一条评论中提到的@BalusC。什么是简单的布尔字段?似乎你在不知道自己做了什么的情况下“修复”了某件事。在这种情况下,这个Q和A对其他人来说是完全无用的,至少A是。你的问题就像上面最后一条评论中提到的@BalusC。