2011-11-24 48 views
0

我有一個由spring管理的支持bean,它的作用域是view ,我有一個用戶頁面,顯示所有用戶 ,我想傳遞給數據表的用戶列表變量,我想初始化這個變量在頁面的構造(和使用這個變量,只要我仍然在頁面中),我很困惑初始化用戶列表的最佳方式,我已經在我的腦海3種方式:初始化背景bean中的變量(在視圖範圍內使用)

初始化通過構造

@Component("user") 
@Scope("view") 
public class MyBean { 

private List<User> usersList; 


public MyBean() { 

    usersList=userService.getUsers(); 

} 

} 

初始化通過PreRender事件

@Component("user") 
@Scope("view") 
public class MyBean { 

private List<User> usersList; 


public void preRender(ComponentSystemEvent event){ 
    if(usersList!=null) 
    usersList=userService.getUsers(); 
} 

} 

初始化通過@PostConstruct

@Component("user") 
@Scope("view") 
public class MyBean { 

private List<User> usersList; 

@PostConstruct 
public void init() { 

    usersList=userService.getUsers(); 

} 


} 

請指教一下是考慮範圍內的情況下,初始的最好方式,我想初始化變量一次,並使用數據表中完全相同的變量,只要我仍然在同一頁面中。

+0

其實你只有兩個選擇 - 構造函數中的初始化不會工作,因爲'userService'將在bean對象創建後注入。我通常在@PostConstruct方法中做,但我沒有使用Spring。 – Osw

回答

1

只有在userService不是注入依賴項時,才能在構造函數中初始化。即當你手動創建它而不是使用@EJB@Inject@ManagedProperty或其他特定的Spring。

如果userService確實是一個依賴注入,那麼@PostConstruct是唯一正確的方式,因爲這個依賴後建設注入,因此這將是在構造函數中null

preRender方法之前調用渲染響應。它不會被調用一次。