在JSF欢迎页面上使用Session Bean提供的数据

时间:2010-03-25 23:04:29

标签: jsf java-ee ejb-3.0

我使用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;
}

有没有更好的解决方案?例如,在某些配置文件中?

2 个答案:

答案 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();
        ...