簡體   English   中英

使用會話中的信息呈現JSF頁面

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM