JSF 1.1中的@postConstruct

时间:2011-07-07 12:34:09

标签: jsf icefaces postconstruct

如何在JSF 1.1中模拟@postConstruct行为,就像在JSF 1.2和更新版本中一样?

实际上,我想在页面加载期间自动调用bean方法吗?

我在JSF 1.1上使用IceFaces 1.8。

1 个答案:

答案 0 :(得分:2)

@PostConstruct的意思是在设置所有托管属性(如<managed-property>@ManagedProperty)之后提供一个钩子来执行一些代码所有依赖注入(例如@EJB@Resource@Inject等)已经发生。

如果你没有这些,只需使用bean的构造函数。

public class Bean {

    public Bean() {
        // Just do your job here. Don't do it the hard way.
    }

    // ...
}

或者,如果您确实想在设置特定属性时执行它,那么在设置器中执行该作业,同时对当前属性值进行null检查。

public class Bean {

    private SomeObject someManagedProperty;

    public void setSomeManagedProperty(someManagedProperty) {
        if (this.someManagedProperty == null && someManagedProperty != null) {
            // First-time set, now you can do your job here.
        }

        this.someManagedProperty = someManagedProperty;
    }

    // ...
}

根据评论

更新

  

我的意思是每次加载页面时执行该方法

@PostConstruct不会这样做。但是,如果bean是请求作用域,那么您将看到相同的效果。您似乎正在使用会话或应用程序范围的托管bean来管理请求范围的数据。这实质上是错误的。您应该将其转换为请求范围的bean。任何真正的会话范围数据都可以拆分为会话范围的bean,然后由<managed-property>注入。