- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
第一次成员(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/
在我的应用程序中,不存储放入 sessionMap 中的对象。我可以在执行 put 操作的同一个对象中访问它,但是当我想从另一个 bean 执行此操作时,该对象不存在。我通过以下方式将对象放入 ses
与 Map 相比,在 Web 应用程序中使用 SessionMap 进行 session 有什么优势吗? 我发现的第一个优点是您可以使 SessionMap 无效,但不能使 Map 无效。 最佳答案
我试图在 session 中存储我的 HashMap 值,然后我使用 JSP 检索它,但我收到一条错误消息 HTTP Status 500 - org.apache.struts2.dispatche
在登录Action中,我正在检查用户身份验证,如果通过验证,我会将用户bean放入sessionMap中: public String execute() { if(userValid)
我是一名优秀的程序员,十分优秀!