【问题标题】:What happens to @SessionScoped @ManagedBean which is already in HttpSession?已经在 HttpSession 中的 @SessionScoped @ManagedBean 会发生什么?
【发布时间】:2012-09-13 15:04:04
【问题描述】:

旧代码在 ServletFilter 中的第一个请求时创建一个@SessionScoped @ManagedBean(即UserSession)并将其放入HttpSession(如果还没有的话)。

现在,当某个 EL 表达式第一次尝试访问该 ManagedBean 时会发生什么?我期望UserSession 的第二个实例(一个手动创建,一个来自JSF)。所以我用一些日志语句对构造函数@PostConstruct@PreDestroy 进行了检测。现在看来 JSF 从来没有创建 UserSession - 只有构造函数被调用。

这可能吗? JSF 可以重用来自HttpSession 的那个bean 吗?将@SessionScoped bean 放入HttpSession 是否合法?

【问题讨论】:

    标签: jsf-2 myfaces


    【解决方案1】:

    你的观察是正确的。在 JSF 的保护下,JSF 本身也将会话范围的托管 bean 存储为 HttpSession 的一个属性。因此,如果它已经存在,它将被重复使用,而不管它是如何最终存在的。

    这是好是坏取决于具体的功能要求。鉴于您的惊讶,我猜这很糟糕,您需要修改方法或功能要求。也许您需要一个辅助(会话范围?)托管 bean,它通过@ManagedProperty 注入特定的会话属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-10
      • 2012-02-07
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多