2

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

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

在覆盖的 login() 中,我定义了一个 User 对象,其中填充了来自 HttpServletRequest 的 Principal 的信息。在应用程序的第一个请求中,User 对象在 SESSION 范围内按预期弹出。但是,在第二个请求中,User 对象已经从 Session 中消失了,当我访问一个注入它的页面时,我得到了一个异常。

我的问题是何时准确地喷射组件:

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

关于required属性:

  • 如果在弹出时 User 对象的计算结果为null,那么已经弹出的 User 是否将从 Session 范围中删除?

干杯!

4

1 回答 1

3

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

对于您的第二个问题:每次请求CustomIdentity完成时,您的字段的值都会被弹出。如果您使用 outjection 属性require=falseuser则当前在会话上下文中输出的 可能会被 覆盖null

于 2010-10-17T20:49:11.957 回答