Seam&multiple war:Contexts.getSessionContext()在其他战争中为null

问题描述:

我在Weblogic 10.3.2和JSF 1.2上使用Seam 2.2.1.CR1。Seam&multiple war:Contexts.getSessionContext()在其他战争中为null

我有一个耳朵应用程序与2个战争文件。第一场战争是JSF/Seam应用程序,第二场战争有JSF/Seam,但也有一些Servlet页面。

当我设置的东西在第一web应用的会话上下文:

Contexts.getSessionContext().set("pimUser", pimUser); 

我可以在第二次战争中,通常把它注射Seam组件。但是,如果我试图从一个Servlet中之后取出的pimUser,我不能访问它:

PimUser user1 = (PimUser) Contexts.getSessionContext().get("pimUser"); 

的Contexts.getSessionContext()为null。我注意到的

org.jboss.seam.contexts.Contexts 

的Javadoc说:

Provides access to the current contexts associated with the thread. 

作者(S):这2个war文件应该是Gavin King托马斯HEUTE

这是否意味着有不同的Contexts.getSessionScope()

我找到了一种方法,其不会允许我通过会话访问这样的:

PimUser user2 = (PimUser) httpRequest.getSession().getAttribute("pimUser"); 

后者的方式,但似乎并没有被正确的。我想通过Seam访问Seam会话上下文。

我发现使用(?)是Seam和多战争应用程序(link)的问题,但是,这些应该已被2.2.0.GA解决。

+1

JEE 5教程说:您可以通过名称将对象值属性与会话相关联。这些属性可以被属于同一个web上下文**的任何web组件**访问,并且正在处理属于同一个会话的请求。两场战争(你都可以把战争看作是一个网络环境)不要分享他们的背景。 – 2010-10-27 02:42:00

默认情况下,常规servlet无法访问Seam上下文:Replacing servlets with Seam resources。您需要首先通过wrapping the call in Seam Contextsreplacing the servlet with a Seam AbstractResource将其集成。

我以前使用过这两种方式,并且它们完美地工作。就个人而言,我更喜欢AbstractResource,因为您可以摆脱相应的web.xml配置。