Java 使用会话中的信息呈现JSF页面
我有以下JSF页面:Java 使用会话中的信息呈现JSF页面,java,servlets,jsf-2,javabeans,facelets,Java,Servlets,Jsf 2,Javabeans,Facelets,我有以下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
<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的生命周期是错误的,或者我的JSF页面中存在一些问题?因此,根本不评估EL?这只能意味着当前请求URL(如您在浏览器地址栏中看到的)与webapp的
web.xml
中配置的FacesServlet
的
不匹配。它负责将XHTML文件解析为JSF组件树,并让它评估所有EL表达式并生成有效的HTML代码。如果您在webbrowser中右键单击查看源代码,您还应该注意到:所有JSF标记都未被解析,而不是生成它们的HTML表示
因此,要解决这个问题,需要确保当前请求URL与Facesservlet的URL模式匹配。因此,如果已将其映射到*.jsf
,则应通过page.jsf
而不是通过page.xhtml
打开页面。或者,您也可以将web.xml
中Facesservlet的URL模式更改为*.xhtml
,这样您就不必担心虚拟URL了
请注意,此问题与会话管理无关。考虑到奇怪的设计,您可能迟早会遇到与此相关的问题,但这是一个不同的问题
另见:
{username}
,而不需要bean。也许servlet的工作应该由bean来完成?您可以尝试将JSF视为ServletAPI之上的抽象。例如,ExternalContext#getSessionMap()
返回HttpSession
的所有属性的映射。JSF会话范围的托管bean基本上存储为HttpSession
的属性。EL#{}
将分别解析请求、会话和应用程序范围中的属性,直到找到第一个非空属性。因此,servlet中的session.setAttribute(“foo”,foo)也可以通过EL中的{foo}
使用(也可以通过JSF中的@ManagedProperty(“{foo}”)
使用!)此外,我们的JSF wiki页面可能会有所帮助:
@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;
}
}
}
Users List
User name #{o.username}