次の 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;
}
}
}
私が実際にやろうとしていることは次のとおりです。
セッションを作成して、以前に呼び出したサーブレットからいくつかのデータを保存します。関連する XHTML ファイルが呼び出されたときにのみマネージド セッション Bean が作成されると仮定すると、セッション オブジェクトから属性を取得し、それを使用して JSF テーブルに入力します。
ただし、JSF テーブルの代わりに、次の出力が得られます。
Users List
User name #{o.username}
マネージド セッション Bean のライフサイクルが間違っていると思い込んでいますか、それとも JSF ページに問題がありますか?