【问题标题】:jsf ajax request recreates viewscoped beanjsf ajax请求重新创建viewscoped bean
【发布时间】:2015-01-14 18:51:20
【问题描述】:

我使用 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。 p>

【问题讨论】:

    标签: ajax jsf request


    【解决方案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>
    

    【讨论】:

    • 哇!非常感谢它有效。我已经被困了很长时间了。我想它必须与整个表单的渲染一起破坏视图范围,但我不知道为什么。
    • 您知道表格是否可以以任何方式拆分为 2 个表格吗? (一个在 cinePreferidoIn.xhtml 内,另一个在 carteleraOut.xhtml 内)。我希望有条件地呈现每个 panelGroup 的单独表单。这就是我以前的方式(我使用了完整的回发),但是当我开始使用 ajax 时它不起作用,所以我将表单移到只有一个表单(但我更喜欢 2 个表单的方式)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2016-01-09
    • 2021-12-29
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2011-10-07
    相关资源
    最近更新 更多