我创建一个HttpSession完全容器是这样的:HttpSession - 如何获取session.setAttribute?
@SessionScoped
@ManagedBean(name="userManager")
public class UserManager extends Tools
{
/* [private variables] */
...
public String login()
{
/* [find user] */
...
FacesContext context = FacesContext.getCurrentInstance();
session = (HttpSession) context.getExternalContext().getSession(true);
session.setAttribute("id", user.getID());
session.setAttribute("username", user.getName());
...
System.out.println("Session id: " + session.getId());
而且我有SessionListener这应该给了我有关会话信息发布:
@WebListener
public class SessionListener implements HttpSessionListener
{
@Override
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
System.out.println("Session id: " + session.getId());
System.out.println("New session: " + session.isNew());
...
}
}
我怎样才能获得username
属性?
如果我使用System.out.println("User name: " + session.getAttribute("username"))
它抛出java.lang.NullPointerException
..尝试它
so session或System.out为null –
在JSF代码中使用原始Servlet API几乎在所有情况下都是代码异味。在这种特殊情况下,为什么不使用会话作用域托管bean? – BalusC
我不明白这个问题......?具有'FacesContext'的代码的第一部分在会话范围内的托管bean中。我要编辑我的帖子..你能告诉我更多吗? – gaffcz