【发布时间】:2009-07-22 17:47:12
【问题描述】:
我有一个支持 bean,我想在实例化 bean 时加载一些列表,以便可以在下拉列表中使用该列表。
有没有只在第一次制作 bean 时才调用的方法?
【问题讨论】:
标签: jsf
我有一个支持 bean,我想在实例化 bean 时加载一些列表,以便可以在下拉列表中使用该列表。
有没有只在第一次制作 bean 时才调用的方法?
【问题讨论】:
标签: jsf
另一种方法是使用 @PostConstruct 属性让一个方法在 Spring/JSF 为您制作 bean 后为您进行初始化。
例如:
@PostConstruct
public void init()
{
List<SelectItem> list = new ArrayList<SelectItem)();
list = getService().getMenuItems();
setMenuItems( list );
}
【讨论】:
你可以使用静态初始化器:
static {
//set up lists
}
或者,如果它们不是静态列表,则为初始化块:
{
//set up lists
}
EDIT* 请记住,这些支持 bean 只是 POJO,并且像任何其他 Java 对象一样工作。您可以像这样设置 faces-config.xml:
<managed-bean-class>mymanagedBean.ConstructorName</managed-bean-class>
我个人觉得只使用一个初始化块更容易。这就是他们的目的。
【讨论】:
如果您想要一个纯粹的声明性值列表,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>
这些内容在第 5.3 节 JSF 1.2 spec 的托管 Bean 设施中进行了介绍。
【讨论】:
JSF-y 的做法是将PhaseListener 绑定到<f:view>,使您的bean 实现PhaseListener,然后在实现方法中在所需阶段填充bean。
【讨论】: