2014-09-07 7 views
1

작동하지 않습니다스트럿츠 setSesssion는() 나는 내 행동 클래스에서 세션에 속성을 넣어하려고

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 적절한로 전환됩니다. 내가 설정 않았다 하지만 세션 속성 코드 위

<% 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" 콘솔에 인쇄 될 것이다 JSP에 표시되지 않습니다.

내가 무엇이 누락 되었습니까?

+0

가치 설명 : http://stackoverflow.com/a/19540712/1654265 –

+0

컨텍스트 메서드를 사용하는 대신'SessionAware' 인터페이스를 사용하십시오. 그것은 별도로 동작을 테스트 할 때 더 유연합니다. –

+0

감사합니다. Dave, SessionAware를 사용하고 있습니다. –

답변

0

session 누락 된 경우 두 가지 경우 모두 다른 개체입니다. 코드에서 스크립틀릿을 사용할 필요가 없습니다. 당신이 세션에 뭔가를 넣어하려는 경우 작업 컨텍스트

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

에서 세션지도를 얻거나 서블릿 세션을 직접

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

를 사용하지만이 지원하는 것 때문에 첫 번째 경우는 바람직하다한다 프레임 워크.

+0

저는 SessionAware를 사용하고 있으며, 문제가없는 첫 번째 솔루션을 사용 했으므로 괜찮습니다. 하지만 actionContext.setSession()이 작동하지 않았다는 것을 자세히 설명해 주실 수 있습니까? –

+0

리디렉션 할 때 새 작업 컨텍스트가 발송자에 의해 만들어지고 새 세션 맵이 설정됩니다. 'HashMap'은 당신이 입력 한 엔트리의 세션 범위를 가지고 있지 않습니다. 대안으로'SessionMap'이 [this] (http://stackoverflow.com/a/17394920/573032) 답변과 같은 범위 전략을 사용하거나 구현할 수 있습니다. –

+0

고마워요 로마 :) –