Почему SessionMap не создается?

При первой регистрации участника необходимо установить сеанс, что обычно происходит при входе в систему, поэтому я решил повторно использовать LoginAction без маршрутизации к нему. Но экземпляр sessionmap не создается.

member logging in is: model.hibernate.Member@549c8a8c
session map not instantiated

РегистрацияДействие

public class RegisterAction extends ActionSupport implements SessionAware{
    private String username, password, email;

    SessionMap<String,Object> sessionmap;  
     MemberDAO mdao = new MemberDAO();
     UsersDAO udao = new UsersDAO();
     Users user = new Users();
     Member member = new Member();



    public RegisterAction() {
        this.email = "";
        this.password = "";
        this.username = "";
    }

   // ...setters/getters...



    public String execute() {



            udao.addUserToDatabase(newUser);

            Member newMember = new Member(username, password);
            mdao.addMemberToDatabase(newMember);
            member = newMember;

            // perform first login (to set session member and role).
            // this could be done by sending to login action. 
            // but then would have to track that it was first login.  this is quick fix. 
            LoginAction firstLogin = new LoginAction(member);   
            firstLogin.setSession(sessionmap);
            String firstLoginAttempt = firstLogin.execute();
            String resultString = "";
            if(firstLoginAttempt.equals(SUCCESS)){resultString = SUCCESS;}
            else{            
                    addActionError("First login attempt didnt work");
                    resultString = ERROR;
            }


            return resultString; // send user to quiz or show error
         }else {
            // cant add user
             addActionError("Username already taken. Please choose another.");
             return ERROR;
         }
    }

    public void setSession(Map<String, Object> map) {
        sessionmap=(SessionMap) map;  
    }
}

ЛогинДействие

public class LoginAction extends ActionSupport implements SessionAware{
    private String username, password;

     MemberDAO mdao = new MemberDAO();
     Member member = new Member();
     SessionMap<String,Object> sessionmap;  


    public LoginAction() {
        this.password = "";
        this.username = "";
    }

    public LoginAction(Member m) {
        this.member = m;
        this.password = member.getPassword();
        this.username = member.getUsername();

    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public String execute() {

        // checks that credentials match db


        setLoggedInMember(member);
        setLoggedInRole(member);

    }


    public String logout(){  
            if(sessionmap!=null){  
                sessionmap.invalidate();  
            }  
        return "success";  
    }  

    public void setSession(Map<String, Object> map) {

        sessionmap=(SessionMap) map;  

    }
protected void setLoggedInMember(Member m){
    System.out.println("member logging in is: "+m.toString());
    try{
        if(sessionmap!=null){
    sessionmap.put("member",m.toString());
        }
        else{System.out.println("session map not instantiated");}
    }catch(Exception e){System.out.println(e);}

}

public Member getLoggedInMember(){
    return (Member) sessionmap.get("member");
}


protected void setLoggedInRole(Member member) {
    if(member.getAdmin() != null)
        sessionmap.put("role", "admin");
    else if(member.getAgent()!=null)
        sessionmap.put("role", "agent");
    else if(member.getUsers()!=null)
        sessionmap.put("role", "user");
    else
        addActionError("Unknown member role");
}

public String  getLoggedInRole(){
    return (String) sessionmap.get("role");
}

person jsky    schedule 24.05.2014    source источник


Ответы (2)


У вас должен быть servletConfig перехватчик, указанный в конфигурация действий.

Перехватчик, который устанавливает свойства действия на основе интерфейсов, реализуемых действием. Например, если действие реализует ParameterAware, то для него будет установлена ​​карта параметров контекста действия.

Этот перехватчик предназначен для установки всех свойств, необходимых действию, если он знает о параметрах сервлета, контексте сервлета, сеансе и т. д. Интерфейсы, которые он поддерживает:

ServletContextAware

ServletRequestAware

ServletResponseAware

ParameterAware

RequestAware

SessionAware

ApplicationAware

PrincipalAware

Способность этого перехватчика внедрять объекты сервлета в компонент действия.

Обратите внимание, что этот перехватчик включен в defaultStack, который используется по умолчанию, если вы не ссылаетесь ни на один из перехватчиков. Если вы переопределите перехватчики в конфигурации действий, defaultStack исчезнет.

person Roman C    schedule 24.05.2014
comment
хорошо, я еще не переопределял какие-либо перехватчики. поэтому стек по умолчанию должен работать. - person jsky; 24.05.2014
comment
но на данный момент я решил просто повторно реализовать управление сеансом, которое было в логине. - person jsky; 24.05.2014
comment
или, может быть, я мог бы также получить карту сеанса, подобную этой Map session = ActionContext.getContext().getSession();, которая работала для меня в другом месте. - person jsky; 24.05.2014
comment
это также способ получить карту сеанса, но реализация SessionAware предпочтительнее. - person Roman C; 24.05.2014

РегистрацияДействие

Member newMember = new Member(username, password);//newMember having username,password object
Member member = new Member();
LoginAction firstLogin = new LoginAction(member);
firstLogin.execute();

в RegisterAction вы передали объект-член (например, член ‹ имя пользователя, пароль>)

LoginAction.класс

 public String execute() {
    //if you received member object here.
    //retrieve your username,password here like this
     //Your mentioned model.hibernate.Member@549c8a8c -->Object Reference value

     member.getUsername();
     member.getPassword();



    setLoggedInMember(member);
    setLoggedInRole(member);

}
protected void setLoggedInMember(Member m){
    System.out.println("member logging in is: "+m.getUsername());


}
person hari    schedule 24.05.2014