【问题标题】:JSF 2.0 - ViewScope and SessionScope advantages?JSF 2.0 - ViewScope 和 SessionScope 的优势?
【发布时间】:2012-01-16 06:55:53
【问题描述】:

如果有人可以帮助我理解,当我们将 SessionBean 注入到 ViewScoped bean 中时,这将是很好的。

我们还能节省会话内存使用量吗?

如果我们只使用 SessionScoped bean 或 ViewScoped bean 注入 SessionBean,我相信会话内存占用没有区别。

当使用 SessionScoped bean 可以顺利实现一切时,为什么我们还要经历这么多使用 View 和 Session 范围 bean 的麻烦。

谢谢, 日深

【问题讨论】:

  • 顺利吗?在同一个会话中,在 2 个或更多不同的浏览器选项卡中打开同一个表单。在一个和另一个中输入值,切换选项卡等,您会看到数据被其他选项卡的数据损坏。这就是视图范围存在的原因之一。会话范围不应再被用于查看范围数据。另见stackoverflow.com/questions/7031885/…

标签: jsf


【解决方案1】:

当您需要只为一个页面保留数据,然后在导航到另一个页面时将其销毁,这是一种非常常见的情况。这使得@ViewScoped bean 成为一个合理的选择。 @SessionScoped 托管 bean 将所有数据保留在会话中。那么,当不再需要数据时,为什么要污染您的会话映射呢?

另请注意,@ViewScoped 注释在 CDI 中不可用。因此,如果您使用带有@Named 注释(而不是@ManagedBean)的bean,那么您就不走运了。但是,也有一些替代方案。

【讨论】:

  • 当然,非常感谢你们的时间和建议。
  • @PedroMorteRolo 我已经一年多没有使用 JSF,但我记得我们为此使用了 MyFaces CODI CDI 扩展。谷歌了解更多详情。
【解决方案2】:

当您将所有内容都放在会话中时,您会使用更多内存。会话通常在 35 分钟或您的默认设置后过期。

切换视图后,Viewscoped bean 可以免费进行垃圾回收。

对于较小的对象,在较小的应用程序中可能无关紧要。但是,例如,如果您将数据库中的返回值存储在会话中,您将不得不关心已用完的内存。

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    相关资源
    最近更新 更多