Я хочу разработать веб-приложение, содержащее «Область меню» и «Активная область». Эта «Активная область» указывает на страницу в управляемом компоненте «Контроллер» и загружает ее по запросу ajax. Загружаемая страница задается с помощью ajax-запроса через «A4j: Commandlink» и отображает «Активную область». Вот код.
1. Index.xhtml
<ui:composition template="template.xhtml">
<ui:define name="menu">
<ui:include src="menu.xhtml" />
</ui:define>
<ui:define name="body">
<h:panel width="100%" id="mainPanel">
<ui:include id="MainIncludeArea" src="#{controller.currentView}"/>
</h:panel>
</ui:define>
</ui:composition>
2. Menu.xhtml
<ui:composition>
<h:form id="menuForm">
<ul>
<li><a4j:commandLink value="Include 1" render="mainPanel" actionListener="#{controller.setInclude1}" /> </li>
</ul>
</h:form>
</ui:composition>
3. Include1.xhtml
<ui:composition>
Included Page 1
<h:form id="f1">
<a4j:commandButton id="cb1" actionListener="#{controller.action}" value="click"/>
</h:form>
</ui:composition>
4. Controller.java
@ManagedBean
@ApplicationScoped
public class Controller {
String currentView;
public Controller() {
this.currentView = "include.xhtml";
}
public void action() {
System.out.println("### Button Clicked ###");
}
public void setInclude1() {
currentView = "include_1.xhtml";
}
public String getCurrentView() {
System.out.println(" ### returning view ###" + currentView);
return currentView;
}
}
Теперь, когда страница загружается в активную область, которая, как вы видите, содержит «a4j: commandButton» с actionListener, если кнопка нажата вместо вызова метода слушателя, страница загружается снова, и когда при повторном нажатии кнопки страница загружается и вызывается метод слушателя. Это означает, что вся страница обновляется снова, а затем устанавливается представление и вызывается метод. В richfaces 3.3.x я использовал «a4j: include» для активной области. Все работало нормально Теперь в richfaces 4.x я должен использовать компонент ui: include. 3.3.x имел компонент «a4j: region» для изоляции региона. Но в 4.x его поведение изменилось.
Теперь я не знаю, как изолировать этот регион для повторного рендеринга и запрос Ajax. Я хочу, чтобы изменялась только активная область, а не вся страница обновлялась.
Спасибо