我有一个由spring管理的支持bean,它的范围是视图 我有一个显示所有用户的用户页面 我想传递给datatable的用户变量列表,我想在页面构造上初始化这个变量(并且只要我还在页面中就使用这个变量),我对最好的方法感到困惑为了初始化用户列表,我有三种方法:
通过构造函数初始化:
@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 :(得分:1)
只有userService
不是注入依赖项时,才能在构造函数中初始化。即当您手动创建它而不是使用@EJB
,@Inject
或@ManagedProperty
或特定于Spring的时候。
如果userService
确实是一个注入的依赖项,那么@PostConstruct
是唯一正确的方法,因为依赖项在构造之后注入,因此它将是{{ 1}}在构造函数中。
在每个渲染响应之前调用null
方法。它不会被调用一次。