尝试有条件地渲染面板时,update属性无法按预期工作

时间:2018-11-19 09:04:16

标签: jsf primefaces

我正在尝试基于后备bean上存在的布尔值显示/隐藏我的面板,但是它无法按预期工作,并且UI上没有任何更改。 加载应用程序后,此操作第一次正常运行(仅显示一个面板),但之后没有执行更新。

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

xhtml文件

Object.keys(this.mainForm.controls["adressForm"].controls)

支持bean(省略详细信息)

    <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>

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

如何使这两个面板都可以工作?

2 个答案:

答案 0 :(得分:0)

在更新操作中,您应仅使用要更新的组件的名称。在您的情况下,您应该使用 update =“:form:panel2,:form:panel3” 。 如果此面板为窗体,则应在组件名称之前使用form元素,否则只需组件名称即可解决问题。

答案 1 :(得分:0)

使用 visible 属性代替了render属性,帮助我实现了我想要的。

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

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