Я попытаюсь объяснить мой дублет в очень нескольких строках кодов:
template.xhtml
- здесь я загружаю страницу, названную параметром get (например, index.xhtml? Page = homepage => я загружаю homepage.xhtml)
<h:panelGroup layout="block" id="content">
<c:catch>
<ui:include src="#{selector.page}.xhtml" />
</c:catch>
</h:panelGroup>
homepage.xhtml
- моя домашняя страница (которая изменится, если я вошел в систему или нет)
<h:panelGroup rendered="#{!login.loggedIn}">
<h:outputLabel styleClass="content_title" value="im not logged" />
</h:panelGroup>
<h:panelGroup rendered="#{login.loggedIn}">
<h:outputLabel styleClass="content_title" value="im logged" />
</h:panelGroup>
ajax call
- вот в чем настоящая проблема; если я сделаю звонок, как это:
<f:ajax event="action" execute="param1 param2" render=":content"/>
selector bean
:
package model;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name="selector")
@RequestScoped
public class Selector {
@ManagedProperty(value="#{param.page}")
private String page;
public String getPage() {
if(page.compareTo("")==0) {
this.page="homepage";
}
return page;
}
public void setPage(String page) {
this.page=page;
}
}
Я загружу новые данные в группу Panel content
, которая определена в шаблоне.
Проблема в том, что когда я вызываю это, я теряю page parameter
(установленный ранее на компоненте селектора), и я не могу перезагрузить текущую страницу.
Итак, уловка для вас:
1 - поставить боб SessionScoped?
2 - Пройдите через вызов ajax, получить значение?
3 - Определить мое собственное приложение другим способом?
Любое предложение будет оценено :)