繁体   English   中英

JSF View Scope:如何检查对象是否在视图树中

[英]JSF View Scope: How to Check if an object is in the view tree

我使用Spring + JSF,而View Scope由Spring管理。 我注意到在每个请求上,视图都被销毁并再次创建,因此在每个请求上都会调用任何@PostConstruct方法。

在大多数页面中都可以,因为在该方法中只是一些对象初始化(主要是新的调用)。

但是在其他页面中,这是一个问题,因为我必须进行繁重的查询才能初始化某些列表,并且视图行为会在每个请求上调用初始化方法...因此页面中的任何请求都会很慢。

我知道视图范围将bean及其对象存储在会话中,并在以后恢复它们。 所以我想知道是否有一种方法可以检查这些对象是否已经存储,所以我不需要在每次请求时都初始化那些重对象。 只需从会议中获取它们即可。

更新

使用的视图范围是在此处实现的视图范围: http : //comdynamics.net/blog/109/spring3-jsf2-view-scope/

您绝对应该将重查询过程放入SessionScoped Bean中。

然后,可以通过使用@ManagedProperty使用从ViewScoped Bean到SessionScopedBean的引用

另外,您可以更改HTML代码以直接引用sessionScoped bean属性。

如果查询或树初始化必须在特定操作之后(例如,当您删除或添加影响树的对象时)或访问页面后被重置,则可以将初始化代码移到“刷新”函数中。 无论如何,在ViewScoped或RequestScoped Bean的PostConstruct中避免繁重的初始化,查询和大数据处理

您需要将可在这些页面上重用的数据移动到Session范围的Bean上,并在其上放置一个方法,该方法将允许您在必要时重新加载数据。 然后从Session bean获取View范围bean的数据。 通过这种方法,您仅应在需要新数据时通过在会话Bean上调用reload方法从数据库中检索数据。

我真的看不到您的问题的另一种解决方案。 如果要在视图范围之外持久保存数据,则需要会话范围的bean或单例。 由于不应将特定于会话的数据存储在单例Bean中,因此只能使用会话Bean。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM