Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用会话中的信息呈现JSF页面_Java_Servlets_Jsf 2_Javabeans_Facelets - Fatal编程技术网

Java 使用会话中的信息呈现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

我有以下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的生命周期是错误的,或者我的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了

请注意,此问题与会话管理无关。考虑到奇怪的设计,您可能迟早会遇到与此相关的问题,但这是一个不同的问题

另见:

非常感谢。这就成功了。另外,请让我知道我对托管会话bean的理解是否正确?我正在使用会话存储数据并在bean中检索它们?这是正确的方法还是有更好的方法?答案取决于您为什么使用servlet。此外,我还想知道是否有必要将bean会话限定为作用域,并像这样处理列表,并将静态变量作为属性。更重要的是,我想知道整个豆子的用处。您可以直接执行
{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}