当前位置: 首页 > 面试题库 >

如何在Facelets页面中访问会话属性

南宫才英
2023-03-14
问题内容

我已经使用JSF和PrimeFaces实现了一个登录表单。我在PrimeFaces展示网站上使用了此示例。

我有一个Facelets页面来显示dataTable。现在,我需要将上面的登录表单与此表格页面集成在一起。因此,我在LoginBean.java中添加了几行内容来处理会话属性。

     if (username.equals(getUsername_db()) && password.equals(getPassword_db())) {//valid user and paward
        loggedIn = true;
        msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", getUsername_db());
        //new lines
        FacesContext context2 = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) context2.getExternalContext().getSession(true);
        session.setAttribute("user", username);
        //end of new lines
        ...

如果用户未登录,我需要在dataTable中隐藏一列。现在我的问题是,如何访问Facelets页面内的会话属性?


问题答案:

您已将登录用户存储为名称为“ user”的会话属性。

因此它在EL中可用如下:

#{user}

您可以只使用emptyEL中的关键字来检查其是否存在(即是否已登录),并且可以使用JSF组件的rendered属性来指示是否生成HTML输出。

<h:panelGroup rendered="#{not empty user}">
    <p>Welcome #{user}, you have been logged in!</p>
</h:panelGroup>

在隐藏表列的特定情况下,只需按以下方式使用它:

<p:column rendered="#{not empty user}">
    ...
</p:column>

存储会话属性的一种更好的方法是使用ExternalContext#getSessionMap()。这样,您的代码就不会有臭味了javax.servlet.*

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", username);

具体问题 无关 ,为什么要下面检查?

if (username.equals(getUsername_db()) && password.equals(getPassword_db())) {

您为什么不只使用SELECT ... FROM user WHERE username=? AND password=?SQL?还是您不信任数据库返回正确的行?



 类似资料:
  • 我有一个使用servlet会话属性显示div的问题 我有一个“result.jsp”页面。在jsp中,我有一个“生成URL”链接、一个空的输入文本字段和一个“addThis”div。链接“生成URL”调用jquery ajax方法“utilComp()”,它调用一个设置会话属性“saveLink”、返回一个值并填充空文本字段的servlet。 如果属性会话“saveLink”为空(因为尚未单击生成

  • 我正在Codeigniter中创建API。在这个API中,我为用户提供了一个登录函数。如果登录成功,我将在CI会话中设置用户数据,并将会话返回给用户。 现在,用户可以使用该会话ID来验证他自己的所有其他请求,如添加/更新/删除。基本上,我希望当用户发送下一个请求时,我可以根据他的会话ID验证他的凭据。 客户请求代码: 上面是一个从客户端到服务器的登录请求示例。在服务器端,服务器验证客户端提供的凭据

  • 问题内容: 如何以一种优雅的方式通过id获取任何HTTP会话或Web应用程序(Java 2 EE)中当前所有活动的HTTP会话? 当前,我有一个会话,一旦创建,便将其放入,一切正常,我可以随时通过会话ID从该映射中检索HTTP会话,但是看起来对象将永远不会完成……即使会话使该映射无效仍然引用无效的会话对象…我也已经阅读了这篇文章,在我看来,这是不可接受的… 换句话说,我需要一种可能性来查看任何Ht

  • 你能帮我编写此代码的Spring mvc风格模拟吗? 如何向会话添加由注释注释的元素,然后访问它?

  • 问题内容: 在后台代码中,我设置了一些数据。 问题是如何在javascript中获取会话值(在我的示例中为“示例数据”)并设置一个新值? 问题答案: 使用Java脚本访问和分配会话变量: 使用Javascript分配ASP.NET会话变量: 使用Javascript访问ASP.NET Session变量:

  • 使用WicketTester时,访问会话的属性会引发NullPointerException错误。 wicket 9之前也有类似的问题:单元测试mockito httpSession 讨论建议使用 测试员。getRequest()。getSession()。setAttribute(“用户名”、“测试用户1”); 而不是 测试员。getHttpSession()。setAttribute(“用户名