我正在尝试基于后备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选择框中的选项之一。
如何使这两个面板都可以工作?
答案 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}">