更新属性在尝试有条件地渲染面板时没有按预期工作

问题描述 投票:0回答:3

我正在尝试根据支持 bean 上存在的布尔值显示/隐藏我的面板,但它没有按预期工作,并且 UI 没有变化。 这在应用程序加载时第一次正常工作(仅显示一个面板),但在没有执行更新之后。

我知道要执行更新,该元素应该已经存在于 dom 中,因此它不会更新服务器未呈现的面板。但我的疑问是,当布尔条件发生变化时,为什么另一个面板(在应用程序加载时显示)没有被隐藏。

xhtml 文件

    <p:panel>
        <h6 align="center" style="width: 14.7em; background-color: #ACBECE;">Case
            Type</h6>
        <!-- comment type -->
        <p:selectOneListbox id="caseTypeId"
            value="#{treeBean.caseTypeOption}">
            <f:selectItems value="#{treeBean.caseType}" var="X"
                itemLabel="#{X}" itemValue="#{X}" />
                <p:ajax listener="#{treeBean.caseTypeList}" update=":#{p:component('panel2')} :#{p:component('panel3')}"/>
        </p:selectOneListbox>
    </p:panel>

    <p:panel id="panel2" rendered="#{treeBean.editmode}">
        <h6 align="center" style="width: 14.7em; background-color: #ACBECE;">Something
            </h6>

        <p:selectOneListbox id="somethingId"
            value="#{treeBean.somethingOption}">
            <f:selectItems value="#{treeBean.something}" var="X"
                itemLabel="#{X}" itemValue="#{X}" />
        </p:selectOneListbox>
    </p:panel>

    <p:panel id="panel3" rendered="#{!treeBean.editmode}">
        <h6 align="center" style="width: 14.7em; background-color: #ACBECE;">Anything
            </h6>

        <p:selectOneListbox id="anythingId"
            value="#{treeBean.anythingOption}">
            <f:selectItems value="#{treeBean.anything}" var="X"
                itemLabel="#{X}" itemValue="#{X}" />
        </p:selectOneListbox>
    </p:panel>

    </h:panelGrid>

backing bean(略)

if (this.caseTypeOption.equalsIgnoreCase("XXX")) {
        this.editmode = false;

    } else {
        this.editmode = true;
    }

其中 XXX 是 caseTypeId 选择框的选项之一。

如何使这两个面板都起作用??

jsf primefaces
3个回答
0
投票

在更新操作中,您应该只使用要更新的组件的名称。在您的情况下,您应该使用 update=":form:panel2, :form:panel3"。 如果这个面板在表单中,你应该在组件名称之前使用 form 元素,否则只有组件名称会起作用。


0
投票

而不是渲染属性,使用 visible 属性帮助我实现了我想要的。

所以而不是

<p:panel id="panel2" rendered="#{treeBean.editmode}">

我用过:

<p:panel id="panel2" visible="#{treeBean.editmode}">


-1
投票

谢谢纳西。工作顺利 嗨嗨

© www.soinside.com 2019 - 2024. All rights reserved.