我有两个<p:selectOneRadio>
和一个<f:selectItem>
。我想根据选择的<h:panelGrid>
隐藏<h:panelGrid>
之一。
<p:selectOneRadio>
<f:selectItem itemLabel="Hide pnl1" itemValue="1" />
<f:selectItem itemLabel="Hide pnl2" itemValue="2" />
</p:selectOneRadio>
<h:panelGrid id="pnl1">
//More stuff here...
</h:panelGrid>
<h:panelGrid id="pnl2">
//More stuff here...
</h:panelGrid>
在此示例中,如果在收音机中选择了选项1,如何隐藏pnl1?
如果在收音机中选择了选项2,如何隐藏pnl2?
请也告诉我所需的Bean代码。
仅显示一个pnl
最佳答案
您可以通过ajax完成。
<h:form id="frmPanels">
<p:selectOneRadio id="sorPanelShow" binding="#{sorPanelShow}">
<f:selectItem itemLabel="Hide pnl1" itemValue="1" />
<f:selectItem itemLabel="Hide pnl2" itemValue="2" />
<p:ajax update="pnlContainer" />
</p:selectOneRadio>
<h:panelGroup id="pnlContainer" layout="block">
<h:panelGrid id="pnl1" rendered="#{sorPanelShow.value eq '2'}">
//More stuff here...
</h:panelGrid>
<h:panelGrid id="pnl2" rendered="#{sorPanelShow.value eq '1'}">
//More stuff here...
</h:panelGrid>
</h:panelGroup>
</h:form>
请注意,必须使用
<h:panelGroup>
包裹<h:panelGrid>
才能重新渲染。这是因为每个未渲染的UIComponent
(rendered="false"
)都不是存储在视图中的树组件的一部分,并且无法通过ajax操作进行更新。因此,与其单独呈现每个<h:panelGrid>
,不如更新包装器UIComponent
。另外,<h:panelGroup layout="block">
在生成HTML时将使用<div>
。相关信息:
What is component binding in JSF? When it is preferred to be used?
<h:panelGroup>
关于java - 如何隐藏h:panelGrid,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23999818/