gpt4 book ai didi

java - 为什么SessionMap没有实例化?

转载 作者:行者123 更新时间:2023-12-01 06:16:17 24 4
gpt4 key购买 nike

第一次成员(member)注册时,需要设置 session ,这通常发生在登录中,所以我想我应该重用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");
}

最佳答案

您需要有servletConfig Action 配置中引用的拦截器。

An interceptor which sets action properties based on the interfaces an action implements. For example, if the action implements ParameterAware then the action context's parameter map will be set on it.

This interceptor is designed to set all properties an action needs if it's aware of servlet parameters, the servlet context, the session, etc. Interfaces that it supports are:

ServletContextAware

ServletRequestAware

ServletResponseAware

ParameterAware

RequestAware

SessionAware

ApplicationAware

PrincipalAware
<小时/>

此拦截器将 servlet stuff 对象注入(inject)到操作 bean 的能力。

请注意,此拦截器包含在 defaultStack 中,如果您不引用任何拦截器,则默认使用该拦截器。如果您覆盖操作配置中的拦截器,defaultStack 就会消失。

关于java - 为什么SessionMap没有实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23840483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com