Как сделать частичный рендеринг страницы (центральное содержание) с JSF2 шаблонов через AJAX (из меню)
я изо всех сил пытался заставить это работать в течение 2 недель, я пытаюсь объединить информацию из BalusC из этих 2 сообщений в (link1 link2) для частичного рендеринга страницы центральной области содержимого с помощью меню слева. Таким образом, ссылки слева будут обновлять содержимое центра через частичную страницу, рендеринг с использованием<f:ajax>
или, может быть<a4j:ajax>
через Richfaces
------------------------------------------------------ | include1 link | | | include2 link | center content like include1.xhtml | | include3 link | | ------------------------------------------------------
Моя страница-layout.xhtml (основной шаблон, который будет использоваться include1.xhtml, include2.xhtml, ..) выглядит следующим образом.
<h:body>
<div id="top" class="top">
<ui:insert name="top">page-layout default top content</ui:insert>
</div>
<div>
<div id="left">
<h:form id="navigationFormId">
<f:ajax render=":contentForm">
<h:commandLink value="include1"
action="#{navigationBean.setPage('include1')}" />
<p></p>
<h:commandLink value="include2"
action="#{navigationBean.setPage('include2')}" />
<p></p>
<h:commandLink value="include3"
action="#{navigationBean.setPage('include3')}" />
<p></p>
</f:ajax>
</h:form>
</div>
<div id="content">
<ui:insert name="content">
<h:panelGroup id="contentPanelGroup" layout="block">
<h:form id="contentForm">
<h:panelGroup rendered="#{navigationBean.page == 'include1'}">
<ui:include src="include1.xhtml" />
</h:panelGroup>
<h:panelGroup rendered="#{navigationBean.page == 'include2'}">
<ui:include src="include2.xhtml" />
</h:panelGroup>
<h:panelGroup rendered="#{navigationBean.page == 'include3'}">
<ui:include src="include3.xhtml" />
</h:panelGroup>
</h:form>
</h:panelGroup>
</ui:insert>
</div>
</div>
</h:body>
NavigationBean.java определяется как bean-компонент ViewScoped через CDI с @Named
открытый класс NavigationBean реализует Serializable {
public NavigationBean() {}
public String getPage() {return page;}
public void setPage(String p) {page = p;}
private String page = "include1";
}
включенные страницы являются файлами наподобие include1.xhtml и include2.xhtml и должны загружаться в центральное содержимое при щелчке левой ссылки меню, вот пример include2.xhtml
<h:body>
<ui:composition template="page-template.xhtml">
<ui:define name="content">
include2
<h:form>
form components for include2
</h:form>
</ui:define>
</ui:composition>
</h:body>
Я получаю FileNotFoundException, хотя трассировка стека не говорит, какой, но удаляя
<h:panelGroup rendered=".....>
<ui:include src="..." />
</h:panelGroup>
Теги удаляет исключение. Я думаю, что это правильная реализация для достижения этой цели на основе 2 сообщений BalusC, но просто не могу заставить ее работать.