簡體   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