У меня есть <p:selectOneRadio>
с двумя <f:selectItem>
и у меня есть два <h:panelGrid>
. Я хочу скрыть один из <h:panelGrid>
зависимости от выбранного <f:selectItem>
.
<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>
В этом примере, как я могу скрыть pnl1, если опция 1 выбрана в радио?
Как я могу скрыть pnl2, если опция 2 выбрана в радио?
Пожалуйста, покажите мне код 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">
будет использовать <div>
при создании HTML.
Связанная информация:
rendered
@KazMiller, должен иметь значениеfalse
, чтобы не показывать компонент. Итак, просто предоставьте поле из вашего управляемого компонента, которое имеетboolean
значение, и установите его значение в методе, вызываемом событием<p:ajax>
.