【发布时间】:2012-02-05 21:24:12
【问题描述】:
我写了这个问题:
https://stackoverflow.com/questions/8589315/jsf2-dynamic-template
但是 BalusC 和 casperOne 告诉我写得不好,所以我试着更好地解释我的问题。
正如我所写,我的项目采用这种结构:
- 在 web 根 3 xhtml 页面中:索引、包含和欢迎;
- 所有其他 xhtml 页面在子文件夹中放入名为 jsf 的 WEB-INF。
我想这是件好事,但我使用 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>
正如我所说,我修改了所有方法以调用包含 setPageIncluded 的 LogicBean 中的操作方法并返回“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 存入session!
这意味着,如果我试图同时打开一个新窗口来导航项目的不同部分,我将无法这样做,因为 LogicBean 只能包含一个 pageInclude 值!
我尝试使用 ViewScope,但或者我不明白它是如何工作的,在这种情况下它没有用,或者我做错了什么并且无法正常工作!
有人可以帮助我吗?
我发现这个问题似乎可以帮助我:
dynamic ui:include with el-expression?
但我不知道它是否有帮助以及如何修改c:forEach 和操作方法以用于我的情况!
我希望这次我能更好地解释我的问题,如果是这样,我感谢你的帮助!
【问题讨论】:
-
对于我在这里阅读的内容,您希望每个浏览器标签都有一个状态,而不是每个浏览器,对吧?
-
@Adrian Mitev :如果您的“状态”是指会话,但不在浏览器窗口或浏览器选项卡之间共享,是的,您是对的!
-
你用的是什么应用服务器?
-
@Adrian Mitev:目前是 Glassfish 3.1,但 JBoss 可能会改变(我不知道哪个版本),为什么?它可以帮助我吗?