我有两个<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>才能重新渲染。这是因为每个未渲染的UIComponentrendered="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/

10-10 20:02