有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

在重写的login()中,我定义了一个用户对象,其中填充了来自HttpServletRequest主体的信息。在应用程序的第一个请求中,用户对象在会话范围内按预期退出。然而,在第二个请求中,用户对象已经从会话中消失,当我访问注入它的页面时,我得到一个异常

我的问题是,组件究竟何时退出:

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

关于required属性:

  • 如果在退出时,用户对象的计算结果为null,那么已经退出的用户是否将从会话范围中删除

干杯


共 (1) 个答案

  1. # 1 楼答案

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

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