我写了这个问题:
https://stackoverflow.com/questions/8589315/jsf2-dynamic-template
但是BalusC和casperOne告诉我写得不好所以我试着更好地解释我的问题 正如我写的那样,我的项目就是这个结构:
我认为这是件好事,但是我使用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的action方法并返回“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但是我不明白它是如何工作的,在这种情况下它没用,或者我错了什么并且它不能正常工作!
有人可以帮助我吗?
我发现这个问题似乎可以帮助我:
dynamic ui:include with el-expression?
但是我不知道它是否有帮助以及如何修改c:forEach
和动作方法以便在我的情况下使用它!
我希望这次我能更好地解释我的问题,如果是这样,我会感谢您的帮助!
答案 0 :(得分:2)
您使用经过JEE6认证的服务器,因此您可以使用CDI进行bean管理。有一个名为MyFaces CODI的CDI扩展库,其中包含一个Window作用域捆绑包,您可以使用它来扩展bean的范围而不是使用会话作用域。这将解决bean范围的问题。