web-dev-qa-db-ja.com

HttpSession-session.setAttributeを取得する方法?

私はこの方法でHttpSessionコンテナを作成しています:

_@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_がスローされます。

9
gaffcz

HttpSessionListenerインターフェイスは、アプリケーションサーバーでセッションが作成および破棄されるタイミングを監視するために使用されます。 HttpSessionEvent.getSession()は、新しく作成または破棄されたセッションを返します(それぞれsessionCreated/sessionDestroyedによって呼び出されたかどうかによって異なります)。

既存のセッションが必要な場合は、リクエストからセッションを取得する必要があります。

HttpSession session = request.getSession(true).
String username = (String)session.getAttribute("username");
13
Buhake Sindi

指定されたキーが見つかった場合、session.getAttribute("key")Java.lang.Objectタイプの値を返します。それ以外の場合はnullを返します。

String userName=(String)session.getAttribute("username");

if(userName!=null)
{
  System.out.println("User name: " + userName);
}
4
adatapost