Я написал этот вопрос:
https://stackoverflow.com/info/8589315/jsf2-dynamic-template
но BalusC и casperOne сказали, что я написал это плохо, поэтому я стараюсь лучше объяснить свою проблему.
Как я писал, у меня есть проект в этой структуре:
- в веб-корне 3 xhtml страниц: индекс, включить и приветствовать;
- все остальные xhtml-страницы в подпапке в WEB-INF, называемые jsf.
Я полагаю, что это хорошо, но я создаю все страницы, используя мастер netbeans "Новые JSF-страницы из классов объектов...", и для использования этой структуры с этим мастером я не могу напрямую связать xhtml страницы, сохраненные в jsf forlder, созданные мастером, и я создал include.xhtml и изменил все способы перенаправления на эту страницу, как я объясню позже, include.xhtml содержит только этот код:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
</h:head>
<h:body>
Utente connesso:<h:outputText value="#{userBean.cognome}"/>
<h:outputText value="#{userBean.nome}"/>
<br/&gr;
<ui:include src="#{logicBean.pageIncluded}"/>
</h:body>
</html>
Как я уже сказал, я модифицировал все методы для вызова метода действий в LogicBean, который содержит setPageIncluded и возвращает "include.xhtml" что-то вроде этого:
PageController.java:
public void prepareList() {
recreateModel();
LogicBean l = (LogicBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("logicBean");
l.action(url+"List.xhtml");
}
LogicBean.java:
public String action(String value) {
setPageIncluded(value);
return "include";
}
Теперь этот код работает очень хорошо, и я могу перемещаться со всех страниц.
Проблема только в том, что bean LogicBean хранится в сеансе!
Это означает, что если я попытаюсь открыть новые окна для навигации по другой части проекта в одно и то же время, я не могу этого сделать, потому что LogicBean может содержать только одно значение pageInclude!
Я пытался использовать ViewScope, но я не понимаю, как это работает, и в этом случае это не полезно, или я что-то не так, и он не работает должным образом!
Кто-нибудь может мне помочь?
Я нашел этот вопрос, который, кажется, может мне помочь:
динамический ui: включить с el-expression?
но я не знаю, может ли это помочь и как изменить метод c:forEach
и action для его использования для моей ситуации!
Надеюсь, что на этот раз я лучше объясню свою проблему, и если да, то благодарю вас за помощь!