Простите меня, я даже не уверен, что мой вопрос правильно сформулирован. Я пытаюсь разгадать отношения между p: tab и h: panelGroup. Я очень слабо разбираюсь в JSF. У меня есть следующий код.Как динамически показывать/скрывать компоненты под p: tab через ajax?
<p:tabView id="view">
<p:tab id="A">
...
<p:ajax event="change" update="C,D" listener="#{bean.captureValue}"/>
</p:tab>
<p:tab id="B" titleStyleClass="x">
<h:panelGroup id="C">
<h:panelGroup rendered="#{bean.checkValue eq 'Yes'}"/>
<f:facet name="title"><table>...</table></f:facet>
<div>....</div>
</h:panelGroup>
</h:panelGroup>
<h:panelGroup id="D">
<h:panelGroup rendered="#{bean.checkValue eq 'No'}"/>
<f:facet name="title"><table>.....</table></f:facet>
<div>....</div>
</h:panelGroup>
</h:panelGroup>
</p:tab>
</p:tabView>
Таким образом, внутри компонента ид = «A», пользователь выбирает значение из выпадающего меню, боб захватывает его и динамически отображать или скрывать идентификатор компонента = «C» или «D» на основе значения.
В первый раз попробуйте, у меня не было h: panelGroup tags. Я использовал отображаемый атрибут непосредственно из компонента p: tab, однако я понял, что если я не обновляю всю страницу, bean.checkValue не будет знать последнее значение. Прочитав много статей на этом форуме, я понял, что должен обернуть его h: panelGroup, который, в свою очередь, работал, показывая либо h: panelGroup «C», либо «D» на основе значения, выбранного из тега p: tab с id = А».
Однако содержимое тега f: facet больше не отображается. Он имеет тег html table, который содержит h: outputText со статическим значением и p: graphicImage. Я не уверен, почему и надеюсь, что кто-то может решить эту тайну.
Обновление:
Благодаря Артуру. Я смог решить проблему с его помощью. Я вставляю сюда код, который выполняет ожидаемый вывод.
<p:tabView id="view">
<p:tab id="A">
...
<p:ajax event="change" update="view" listener="#{bean.captureValue}"/>
</p:tab>
<p:tab id="B" titleStyleClass="x">
<f:facet name="title">
<ui:fragment rendered="#{bean.checkValue eq 'Yes'}"/>
<table>...</table>
</ui:fragment>
</f:facet>
<ui:fragment rendered="#{bean.checkValue eq 'Yes'}"/>
<div>...</div>
</ui:fragment>
<f:facet name="title">
<ui:fragment rendered="#{bean.checkValue eq 'No'}"/>
<table>...</table>
</ui:fragment>
</f:facet>
<ui:fragment rendered="#{bean.checkValue eq 'No'}"/>
<div>...</div>
</ui:fragment>
</p:tab>
</p:tabView>
Границы должны быть прямыми дочерними элементами компонента, который вы хотите иметь на – Kukeltje