将会话值从动作传递到seam框架中的servlet



我正在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[41CBDED6EBBBECEBA001A70555F51CA5],我在servlet中得到的是StandardSession[EACBDED6E34BECEB3401A70555F51CA5],我得到不同的会话实例的任何原因

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

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

这个例子创建了一个CDI Bean,它在整个过程中保持活动,并且只存储一个String。通过依赖注入,两个组件都可以访问它。

在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();
    }
}

相关内容

  • 没有找到相关文章

最新更新