根据下拉列表在primeface中显示一个面板

时间:2014-02-10 14:55:32

标签: jsf primefaces

我有一个包含多个值的下拉列表,我只想在选择了值时显示一个面板

这是简化的代码

 <p:selectOneMenu id="" value="#{myBean.myElement}" >
    <f:selectItem itemLabel="Choose an element itemValue=""  />        
    <f:selectItems value="#{myBean.myElementList}" />
    <p:ajax update="myPanel" listener="#{myBean.handleChange}"/>
 </p:selectOneMenu>   

 <p:panel id="myPanel" header="My Header" style="margin-bottom:10px;" rendered="#{myBean.myElement != null}">  

但这似乎不起作用(仅当我手动刷新页面时才有效)。 你怎么能解决这个问题?

1 个答案:

答案 0 :(得分:3)

由于未呈现myPanel,组件将不在组件树中,因此以后无法在视图中更新。使用另一个UIContainer将其包装为<h:panelGroup>并更新此容器:

<p:selectOneMenu id="" value="#{myBean.myElement}" >
    <f:selectItem itemLabel="Choose an element itemValue=""  />        
    <f:selectItems value="#{myBean.myElementList}" />
    <!-- here update to foo instead of myPanel -->
    <p:ajax update="foo" listener="#{myBean.handleChange}"/>
</p:selectOneMenu>

<h:panelGroup id="foo">
    <p:panel id="myPanel" header="My Header" style="margin-bottom:10px;"
        rendered="#{myBean.myElement != null}">
</h:panelGroup>