我使用JSF托管bean调用从数据库提供数据的EJB方法。我想在应用程序的欢迎页面上使用一些数据。它的最佳解决方案是什么?
EJB被注入到JSF托管bean中,看起来注入是在执行构造函数之后完成的。所以我无法在构造函数中调用EJB方法。
EJB调用的正常位置在JSF操作方法中,但是如何在填充应用程序的第一页之前调用这样的方法?
一种可能的解决方案是在欢迎页面上使用的getter中有条件地调用EJB方法,例如:
public List getProductList(){
if (this.productList == null)
this.productList = myEJB.getProductList();
return this.productList;
}
有没有更好的解决方案?例如,在某些配置文件中?
答案 0 :(得分:1)
您可以在使用@PostConstruct
注释的方法中执行此操作。这将在构造bean并完成所有JSF托管属性和资源注入后执行一次。
@PostConstruct
public void init() {
this.productList = myEJB.getProductList();
}
答案 1 :(得分:0)
如果你想从xhtml视图中调用
<f:view>
<f:metadata>
<f:viewAction action="${myController.init()}" onPostback="true"/>
</f:metadata>
</f:view>
和您的控制器
public class MyController{
public void init(){
this.productList = myEJB.getProductList();
...