【问题标题】:Faces Backing Bean initializingFaces Backing Bean 初始化
【发布时间】:2009-07-22 17:47:12
【问题描述】:

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

有没有只在第一次制作 bean 时才调用的方法?

【问题讨论】:

    标签: jsf


    【解决方案1】:

    另一种方法是使用 @PostConstruct 属性让一个方法在 Spring/JSF 为您制作 bean 后为您进行初始化。

    例如:

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

    【讨论】:

      【解决方案2】:

      你可以使用静态初始化器:

      static {
         //set up lists
      }
      

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

      {
         //set up lists
      }
      

      Tutorial here.

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

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

      我个人觉得只使用一个初始化块更容易。这就是他们的目的。

      【讨论】:

      • 它的问题是你缺少一些初始化。建议@PostConstruct 的另一个答案将在更多情况下起作用。您的建议对于非常简单的事情很好,但如果您使用任何依赖注入,例如,它将不起作用。即使您暂时不使用 DI,使用 @PostConstruct 将来也可以这样做。静态/初始化程序块需要您更改很多东西才能让 DI 稍后工作。
      【解决方案3】:

      如果您想要一个纯粹的声明性值列表,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 设施中进行了介绍。

      【讨论】:

        【解决方案4】:

        JSF-y 的做法是将PhaseListener 绑定到&lt;f:view&gt;,使您的bean 实现PhaseListener,然后在实现方法中在所需阶段填充bean。

        【讨论】:

        • 这太过分了,@PostConstruct 会做。
        • 现在@PostConstruct 是一个选项,是的:-)
        猜你喜欢
        • 1970-01-01
        • 2012-01-22
        • 2013-08-10
        • 1970-01-01
        • 2013-11-20
        • 2017-07-07
        • 1970-01-01
        • 1970-01-01
        • 2014-09-28
        相关资源
        最近更新 更多