JavaServer Faces Bean实例化顺序

时间:2011-03-24 18:20:09

标签: jsf

JSF创建托管bean的顺序是否有任何保证?

我的情况基本如下: 我在同一页面中使用了2个bean。在创建第二个时,我希望它从第一个获得一些信息,例如在其@PostConstruct方法中(以避免命中数据库)。

有什么方法可以确保第一个bean实际上是在第二个bean之前创建的,所以获取数据会成功吗?

1 个答案:

答案 0 :(得分:4)

您可以通过将一个bean注入另一个bean的托管属性来确保这一点。

假设您已使用JSF 2.0,请使用@ManagedProperty

@ManagedBean
@RequestScoped
public class FirstBean {
    // ...
}

@ManagedBean
@RequestScoped
public class SecondBean {

    @ManagedProperty(value="#{firstBean}")
    private FirstBean firstBean; // +setter

    @PostConstruct
    public void init() {
        // firstBean is available here.
    }

    // ...
}

或者当您仍然使用JSF 1.2时,请在<managed-property>中使用faces-config.xml

<managed-bean>
    <managed-bean-name>firstBean</managed-bean-name>
    <managed-bean-class>com.example.FirstBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<managed-bean>
    <managed-bean-name>secondBean</managed-bean-name>
    <managed-bean-class>com.example.SecondBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>firstBean</property-name>
        <value>#{firstBean}</value>
    </managed-property>
</managed-bean>