【发布时间】:2014-05-28 11:26:25
【问题描述】:
我使用 Spring + JSF,View Scope 由 Spring 管理。我注意到,在每个请求中,视图都会被销毁并再次创建,因此每个请求都会调用任何 @PostConstruct 方法。
在大多数页面中这是可以的,因为在该方法中只是一些对象初始化(主要是 new 调用)。
但在其他页面中,这是一个问题,因为我必须进行繁重的查询来初始化一些列表,并且视图行为会在每个请求上调用初始化方法......所以页面中的任何请求都非常缓慢。
我知道视图范围在会话中存储 bean 及其对象,然后再恢复它们;所以我想知道是否有办法检查这些对象是否已经存储,所以我不需要在每次请求时都初始化这些重对象;只需从会话中获取它们即可。
更新
使用的视图范围是这里实现的:http://comdynamics.net/blog/109/spring3-jsf2-view-scope/
【问题讨论】:
-
也许您需要将可在这些页面上重用的数据移动到会话范围的 bean 中,并在其上放置一个方法,以便您在必要时重新加载数据。然后从 Session bean 中获取 View 范围 bean 的数据。
-
Spring 本身不支持视图范围(仅请求、会话和应用程序)。因此,要么您创建了自己的视图范围实现,要么没有视图范围。
-
@M.Deinum 是对的。如果您还没有实现视图范围,那么这可能会导致您的问题。有关如何执行此操作的信息,请参阅此博客文章:cagataycivici.wordpress.com/2010/02/17/…
-
您好,感谢您的回答。可悲的是,我已经实现了视图范围,请参阅更新以获取信息。我对使用 Session Scope 仅用于存储此数据持怀疑态度,该数据仅在此特定页面中使用,因为很难手动追踪并将其从会话中删除,至少我认为......如果你有好方法,不要羞于分享=D
-
@LucasP 我完成了你的建议......它运作良好,谢谢。可能的缺点,我稍后会处理。我看不到接受你建议的按钮,所以如果你可以直接回答,而不是评论,我会接受你的回答。 YannicuLar 已经回答了你所做的同样的事情,但既然你先做了,你应该接受。问候!
标签: java spring jsf jsf-2 view