在辅助bean中初始化变量(在视图范围中使用)

时间:2011-11-24 11:34:34

标签: spring java-ee jsf-2

我有一个由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();

}


}

请告知在视图范围的情况下初始化的最佳方法是什么,我想初始化变量一次,并且只要我仍然在同一页面中,就在数据表中使用完全相同的变量。

1 个答案:

答案 0 :(得分:1)

只有userService不是注入依赖项时,才能在构造函数中初始化。即当您手动创建它而不是使用@EJB@Inject@ManagedProperty或特定于Spring的时候。

如果userService确实是一个注入的依赖项,那么@PostConstruct是唯一正确的方法,因为依赖项在构造之后注入,因此它将是{{ 1}}在构造函数中。

每个渲染响应之前调用null方法。它不会被调用一次。