1

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

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

我在 JSF 1.1 上使用 IceFaces 1.8。

4

1 回答 1

2

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

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

public class Bean {

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

    // ...
}

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

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>.

于 2011-07-07T18:16:22.827 回答