java Seam会话范围的组件在下一个请求中消失
我有Seam会话范围的组件CustomIdentity,它覆盖了标准Seam标识(也包括会话范围)。扩展的CustomIdentity具有一个属性
@Out(required=false, scope=ScopeType.SESSION)private User user
在重写的login()中,我定义了一个用户对象,其中填充了来自HttpServletRequest主体的信息。在应用程序的第一个请求中,用户对象在会话范围内按预期退出。然而,在第二个请求中,用户对象已经从会话中消失,当我访问注入它的页面时,我得到一个异常
我的问题是,组件究竟何时退出:
- 在CustomIdentity组件的每个方法之后(即使它不包含
user
的引用)李> - 在每个包含用户组件引用的方法之后李>
关于required
属性:
- 如果在退出时,用户对象的计算结果为
null
,那么已经退出的用户是否将从会话范围中删除李>
干杯
# 1 楼答案
对于您的第一个问题:组件在
CustomIdentity
的每个方法之后都被抛出。看看相应的Seam源代码org.jboss.seam.core.BijectionInterceptor
(Seam 2.2.0)。双射发生在组件上,即类、级别关于你的第二个问题:每次对
CustomIdentity
的请求完成时,你的字段的值都会被抛出。如果使用outjection属性require=false
,会话上下文中当前被outjection的user
可能会被null
覆盖