私はこの方法で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
_がスローされます。
HttpSessionListener
インターフェイスは、アプリケーションサーバーでセッションが作成および破棄されるタイミングを監視するために使用されます。 HttpSessionEvent.getSession()
は、新しく作成または破棄されたセッションを返します(それぞれsessionCreated
/sessionDestroyed
によって呼び出されたかどうかによって異なります)。
既存のセッションが必要な場合は、リクエストからセッションを取得する必要があります。
HttpSession session = request.getSession(true).
String username = (String)session.getAttribute("username");
指定されたキーが見つかった場合、session.getAttribute("key")
はJava.lang.Object
タイプの値を返します。それ以外の場合はnullを返します。
String userName=(String)session.getAttribute("username");
if(userName!=null)
{
System.out.println("User name: " + userName);
}