【问题标题】:How to clean up a particular view in the Session如何清理 Session 中的特定视图
【发布时间】:2013-12-06 10:49:21
【问题描述】:

当 javax.faces.STATE_SAVING_METHOD 设置为服务器时,每个页面的视图状态都保存在会话映射中。如果我已经在某个视图中,并且如果我在浏览器中输入一个 url(GET 请求)到同一页面,则会创建一个新视图。现在我想删除现有的视图。如果我在获取请求路径中包含关联的 ViewId 或作为 GET 请求参数,那么使用新的 GET 请求清理特定的早期视图的最佳方式和位置是什么。非常感谢您的帮助。

【问题讨论】:

  • 通常您通过托管 bean 的范围来控制它:应用程序范围、会话范围、页面范围、视图范围、请求范围(希望我没有忘记任何内容)。您的托管 bean 是否在会话范围内?
  • bean是jsf2视图范围

标签: jsf jsf-2


【解决方案1】:

你不能。至少不是通过标准的 API 方式。让它过期。

如果您因为目标服务器上的内存占用少而担心内存使用,并且您打算在无状态模式下使用 JSF,并且您使用的是 Mojarra 2.1.19 或更高版本,只需使用

<f:view transient="true">

这样 JSF 根本不会保存视图状态。请记住,逻辑结果是您不能再使用视图范围。视图范围 bean 的行为类似于请求范围 bean。

另一种方法是降低会话中(逻辑)视图的默认数量。另请参阅com.sun.faces.numberOfViewsInSession vs com.sun.faces.numberOfLogicalViews 了解确切的工作原理。

【讨论】:

  • 是的,问题出在内存使用上,我使用的是 Myfaces-2.1。我的应用程序是支持多个选项卡/窗口,使用 org.apache.myfaces.NUMBER_OF_SEQUENTIAL_VIEWS_IN_SESSION == 1,我通过 Post/PRG 请求清除了我之前的视图。但是浏览器后退/前进或重新加载是 GET 请求,这些视图堆积起来填充默认值(20 个视图),最终在最少使用的窗口/选项卡中到期。请建议/指导,如果有任何可靠的方法可以通过 viewid 以编程方式删除视图,尽管它不是标准的 API 方法。再次感谢您。
  • 查看 MyFaces 源代码并执行与回发相同的操作。
  • 这是我昨天想到的选项。那让我探索一下,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多