面对Backing Bean初始化

时间:2009-07-22 17:47:12

标签: jsf

我有一个支持bean,我想在实例化bean时加载一些列表,以便列表可以在下拉列表中使用。

是否有一个方法只在首次创建bean时被调用?

4 个答案:

答案 0 :(得分:11)

另一种方法是使用@PostConstruct属性让一个方法在Spring / JSF为你创建bean之后为你做初始化。

例如:

@PostConstruct
public void init()
{
    List<SelectItem> list = new ArrayList<SelectItem)();
    list = getService().getMenuItems();
    setMenuItems( list );
}

答案 1 :(得分:1)

您可以使用静态初始化程序:

static {
   //set up lists
}

或者如果它们不是静态列表,那么初始化块:

{
   //set up lists
}

Tutorial here.

编辑*请记住,这些支持bean只是POJO,并且像任何其他Java对象一样工作。您可以像这样设置faces-config.xml:

<managed-bean-class>mymanagedBean.ConstructorName</managed-bean-class>

就个人而言,我发现只使用初始化程序块更容易。这就是它们的用途。

答案 2 :(得分:0)

如果你想要一个纯粹的声明性值列表,faces-config.xml提供了一些选项:

  <managed-bean>
    <managed-bean-name>staticListOfStuff</managed-bean-name>
    <managed-bean-class>java.util.ArrayList</managed-bean-class>
    <managed-bean-scope>application</managed-bean-scope>
    <list-entries>
      <value>Value 1</value>
      <value>Value 2</value>
    </list-entries>
  </managed-bean>

这个内容将在JSF 1.2 spec的5.3管理Bean工具中介绍。

答案 3 :(得分:0)

JSF-y这样做的方法是将PhaseListener绑定到<f:view>,使你的bean实现PhaseListener,然后在实现方法中填充所需阶段的bean