【问题标题】:Initializate a variable in a backing bean (to be used in view scope)在支持 bean 中初始化一个变量(在视图范围内使用)
【发布时间】:2012-01-05 13:57:49
【问题描述】:

我有一个由 spring 管理的 backing bean,它的范围是 view 我有一个显示所有用户的用户页面 我想将用户变量列表传递给数据表,我想在页面构建时初始化这个变量(只要我还在页面中就使用这个变量),我对最好的方法感到困惑要初始化用户列表,我有 3 种方法:

通过构造函数初始化:

@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();

}


}

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

【问题讨论】:

  • 实际上你只有两个选项 - 构造函数中的初始化不会起作用,因为 userService 将在创建 bean 对象后注入。我通常在@PostConstruct 方法中这样做,但我没有使用 Spring。

标签: spring jakarta-ee jsf-2


【解决方案1】:

仅当userService 不是注入依赖项时,才可以在构造函数中初始化。 IE。当您手动创建它而不是使用 @EJB@Inject@ManagedProperty 或任何特定于 Spring 的东西时。

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

preRender 方法在每个 渲染响应之前调用。它不会只调用一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    相关资源
    最近更新 更多