jsf ajax请求重新创建viewscoped bean

时间:2014-11-17 18:55:30

标签: ajax jsf request

我使用JSF 2.2和Primefaces 3.5,当我更新父组件时,我遇到了ajax请求的问题:

<h:panelGroup id="PAG_CARTELERA" layout="block">
<h:form id="FRM_CARTELERA">
        <h:panelGroup rendered="#{!carteleraController.existeCookieCinePref}">
            <ui:include src="/paginas/cartelera/cinePreferidoIn.xhtml" />
        </h:panelGroup>
        <h:panelGroup rendered="#{carteleraController.existeCookieCinePref}">
            <ui:include src="/paginas/cartelera/carteleraOut.xhtml" />
        </h:panelGroup>
</h:form>
</h:panelGroup>

在carteleraOut.xhtml页面中我有:

<p:calendar id="CART_FECHA" value="#{carteleraController.fechaConsulta}"
                                maxlength="10"
                                size="10"
                                locale="es"
                                pattern="dd/MM/yyyy"
                                navigator="true"
                                showOn="button"
                                showButtonPanel="true">
                                <f:converter converterId="calendarConverter" />
                                <p:ajax process="@this" update=":PAG_CARTELERA" event="dateSelect" listener="#{carteleraController.consultarOtroDiaAction}" />

在“consultarOtroDiaAction”监听器中,我设置了“existeCookieCinePref”布尔字段并返回void以保持在同一视图中(“carteleraController”是ViewScoped bean)。

但是,当我更改p:calendar组件的值时,第一个ajax请求正常工作,但以下请求会重新创建ViewScoped bean。

为什么会这样?

谢谢。

注意:如果在p:calendar ajax请求中我更新了carteleraOut.xhtml本身的一个组件,它可以工作,但如果我更新整个PAG_CARTELERA面板组,它会重新创建bean。

1 个答案:

答案 0 :(得分:1)

你可以在h:form

中尝试h:panelGroup
<h:form id="FRM_CARTELERA">
<h:panelGroup id="PAG_CARTELERA" layout="block">
        <h:panelGroup rendered="#{!carteleraController.existeCookieCinePref}">
            <ui:include src="/paginas/cartelera/cinePreferidoIn.xhtml" />
        </h:panelGroup>
        <h:panelGroup rendered="#{carteleraController.existeCookieCinePref}">
            <ui:include src="/paginas/cartelera/carteleraOut.xhtml" />
        </h:panelGroup>
</h:panelGroup>
</h:form>