[英]Rendering JSF pages using information from sessions
我有以下JSF页面:
<h:head>
<title>Admin Page</title>
</h:head>
<h:body>
<h1>Users List</h1>
<h:dataTable value="#{adminBean.linkArr}" var="o" >
<h:column>
<f:facet name="header">User name</f:facet>
#{o.username}
</h:column>
</h:dataTable>
</h:body>
像这样的托管bean:
@ManagedBean(name="adminBean")
@SessionScoped
public class AdminBean {
private static UserLink[] linkArr;
public AdminBean() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
HttpSession session = request.getSession();
String values[] = (String[])request.getSession().getAttribute("userList");
int userNos = values.length;
linkArr = new UserLink[userNos];
for(int i = 0; i < userNos; ++i) {
String tmp = values[i];
linkArr[i] = new UserLink(tmp);
}
}
public UserLink[] getLinkArr() {
return linkArr;
}
public static class UserLink {
public String username;
public UserLink(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
}
}
我实际上要做的是:
通过创建会话来保存先前调用的servlet中的一些数据。 假设只在调用其关联的XHTML文件时创建托管会话bean,我从会话对象获取属性,然后使用填充JSF表。
但是,我得到以下输出,而不是JSF表:
Users List
User name #{o.username}
我是否为托管会话bean假设生命周期错误,或者我的JSF页面存在问题?
那么,EL根本没有评估? 这只能意味着当前请求URL(如您在浏览器的地址栏中看到的)与Web应用程序web.xml
配置的FacesServlet
的<url-pattern>
不匹配。 它是负责将XHTML文件解析为JSF组件树并让它评估所有EL表达式并生成有效HTML代码的人。 如果你已经在webbrowser中右击了View Source ,你也应该注意到:所有的JSF标签都是未解析的,而不是生成它们的HTML表示。
因此,要解决此问题,您需要确保当前请求URL与faces servlet的URL模式匹配。 所以,如果你映射了它*.jsf
,那么你应该打开网页page.jsf
而不是由page.xhtml
。 或者,您也可以将web.xml
faces servlet的URL模式更改为*.xhtml
,这样您就不必担心虚拟URL。
请注意,此问题与会话管理无关 。 考虑到奇怪的设计,你可能迟早会遇到与之相关的问题,但这是一个不同的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.