Ответ 1
Оберните <ui:include>
внутри двух элементов <h:panelGroup>
. Здесь есть уловка, вы не можете переопределить условный компонент. Почему это? потому что когда атрибут rendered
разрешает false
, он не будет рассматриваться при рендеринге представления, поэтому он не может быть целью операции (в данном случае связанной с визуализацией).
Прыгая к коду, вы получите следующее:
<h:panelGroup id="wrapperPanel">
<h:panelGroup id="tableRenderPanel" rendered="#{yourBean.renderTable}">
<ui:include src="../log/viewDlg.xhtml"/>
</h:panelGroup>
</h:panelGroup>
yourBean#renderTable
- это свойство Boolean
, которое определяет, будет ли компонент отображаться. Когда он оценивает значение false
, компонент не включается в дерево компонентов.
Переключение вида
Чтобы переключить представление, просто создайте метод bean, который обновит страницу
<h:commandLink action="#{yourBean.toggleTableView}"/>
или конкретной панели через AJAX. Чтобы сделать это в JSF 1.2, полагайтесь на расширения, такие как RichFaces, чтобы представить AJAX, если сможете. Например, если вы выбрали RichFaces, вы можете использовать <a4j:commandLink/>
и его удобный render
(или reRender
в более старых версиях) атрибут для достижения того, что вы могли бы сделать с помощью <f:ajax/>
в JSF 2
<a4j:commandLink action="#{yourBean.toggleTableView}" reRender="wrapperPannel"/>
Или другой вариант -
<a4j:commandLink action="#{yourBean.toggleTableView}">
<a4j:support event="oncomplete" reRender="wrapperPannel"/>
</a4j:commandLink>
Обратите внимание, что атрибут reRender
может отличаться в зависимости от структуры вашей страницы, но в конце должен всегда ссылаться на идентификатор панели обертки. Кроме того, reRender
был переименован в просто render
в поздних версиях RichFaces.
Итак, если у вас есть свойство renderTable
(getter + setter) в yourBean
, toggleTableView
должен его изменить, чтобы динамически определить, должен ли компонент быть рендер или нет (renderTable = false
).
Знакомство с RichFaces
Проверьте эту ссылку за помощью в настройке RichFaces в вашем проекте.