0

我在 TestAction 类中设置会话对象,当我试图在 TestServlet 中获取会话对象时,它返回 null。任何人请告诉我如何将会话从动作类传递到 Seam 框架中的 servlet。

@Scope(ScopeType.EVENT)
@Name("testAction  ")
public class TestAction  {

    public void setSessionObj(){

        FacesContext facesContext = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
        session.setAttribute("temp", "124563");
    }
}

//Servlet 从这里开始

 public class TestServlet extends HttpServlet {

        public void init(ServletConfig servletConfig) throws ServletException {
            super.init(servletConfig);
            servletContext = servletConfig.getServletContext();

        }

        protected String doExecute(HttpServletRequest request,
                HttpServletResponse response) throws Exception {

                 Session session =    request.getSession(false);
            String user1 = (String) session .getAttribute("temp");
        }
    }

下面是调试会话实例的观察

我检查了会话对象实例,以防我在操作和 servlet 中得到什么,它们都是不同的会话实例。例如,实例是 StandardSession[41CBDED6EBBBBECEBA001A70555F51CA5],而我在 servlet 中得到的是 StandardSession[EACBDED6E34BECEB3401A70555F51CA5],我得到不同会话实例的任何原因

4

2 回答 2

1

不需要通过FacesContextservlet 中的 访问会话属性。只需用于request.getSession()获取会话。只要您的请求实际上来自同一个会话,会话属性就应该在 servlet 中可用。

于 2013-04-03T07:18:36.590 回答
-2

我将使用通过 CDI / Spring 注入到 JSF Managed Bean 和 servlet 中的代理对象。

这个例子创建了一个 CDI Bean,它在整个时间内保持活动状态,并且只存储一个字符串。通过依赖注入,两个组件都可以访问它。

在 META-INF 资源文件夹下创建一个空的 bean.xml 文件

@Named
@ApplicationScoped
public class Container{
 private String temp;

 public Container(){

 }
 public void setTemp(String temp) {
  this.temp = temp;
 }

 public String getTemp() {
  return temp;
 }
}

@Scope(ScopeType.EVENT)
@Name("testAction  ")
public class TestAction  {

 @Inject 
 Container container;

public void setSessionObj(){
 container.setTemp("123456");

}
}

//Servlet 从这里开始

public class TestServlet extends HttpServlet {

@Inject
Container container; 
    public void init(ServletConfig servletConfig) throws ServletException {
        super.init(servletConfig);
        servletContext = servletConfig.getServletContext();

    }

    protected String doExecute(HttpServletRequest request,
            HttpServletResponse response) throws Exception {

             Session session =    request.getSession(false);
        String user1 = container.getTemp();
    }
}
于 2013-04-03T07:32:44.373 回答