1

我正在尝试将属性从我的动作类中放入会话

public String execute()  {
    String result = Action.SUCCESS;

    if (username.equals("pavan") && password.equals("kumar")){
        System.out.println("Success");
        Map<String, Object> session = new HashMap<String, Object>();
        session.put("username", username);
        session.put("role", 1);
        ActionContext.getContext().setSession(session);
        return Action.SUCCESS;
    }
    else{
        System.out.println("Input");
        return Action.INPUT;    

    }
}

当用户名和密码有效并转到相应的 JSP 时,将返回成功。但是我设置的会话属性在 jsp 中不可见

<% if(session == null || session.getAttribute("username") == null) {
System.out.println("No valid session found");
response.sendRedirect("/Test/index.jsp");
}%>

上面的代码是jsp将重定向到index.jsp"No valid session found"打印在控制台中。

我错过了什么?

4

1 回答 1

0

在这两种情况下,您都错过session了不同的对象。您不需要在代码中使用 scriptlet。如果你想在会话中添加一些东西,你应该从操作上下文中获取会话映射

Map<String, Object> session = ActionContext.getContext().getSession();
session.put("username", username);
session.put("role", 1);
return Action.SUCCESS;

或者直接使用servlet session

HttpSession session = ServletActionContext.getRequest().getSession(); 
session.setAttribute("username", username);
session.setAttribute("role", 1);
return Action.SUCCESS;

但是第一种情况更可取,因为它得到了框架的支持。

于 2014-09-07T16:36:08.927 回答