[英]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.