如何在JSF 1.1中模拟@postConstruct
行为,就像在JSF 1.2和更新版本中一样?
实际上,我想在页面加载期间自动调用bean方法吗?
我在JSF 1.1上使用IceFaces 1.8。
答案 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>
注入。