Seam会话范围组件在下一个请求中消失

时间:2010-10-17 10:14:33

标签: java dependency-injection seam bijection

我有Seam会话范围的组件CustomIdentity,它覆盖了标准的Seam Identity(也是会话范围的)。扩展的CustomIdentity具有属性

@Out(required=false, scope=ScopeType.SESSION)private User user

在overriden login()中,我定义了一个User对象,填充了来自HttpServletRequest的Principal的信息。在应用程序的第一个请求中,User对象在SESSION范围中按预期排出。但是在第二个请求中,User对象已从Session中消失,当我访问一个Injects它的页面时,我得到一个例外。

我的问题是什么时候组件被完全抛出:

  • 在CustomIdentity组件的每个方法之后(即使它不包含user的引用)?
  • 在每个包含User组件引用的方法之后?

关于required属性:

  • 如果在注销时User对象的计算结果为null,那么已经被注销的用户是否会从会话范围中删除?

干杯!

1 个答案:

答案 0 :(得分:3)

对于您的第一个问题:在CustomIdentity的每个方法之后,组件被排除。看一下相应的Seam源代码org.jboss.seam.core.BijectionInterceptor(Seam 2.2.0)。双射发生在组件,即类,级别。

关于第二个问题:每次CustomIdentity的请求结束时,您的字段值都会被删除。如果您使用注销属性require=false,则会话上下文中当前被注销的user可能会被null覆盖。