【问题标题】:Using Session Bean provided data on JSF welcome page在 JSF 欢迎页面上使用 Session Bean 提供的数据
【发布时间】:2010-03-25 23:04:29
【问题描述】:

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

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

【问题讨论】:

    标签: jsf jakarta-ee ejb-3.0


    【解决方案1】:

    您可以在带有@PostConstruct 注释的方法中执行此操作。这将在构建 bean 并完成所有 JSF 托管属性和资源注入后执行一次。

    @PostConstruct
    public void init() {
        this.productList = myEJB.getProductList();
    }
    

    【讨论】:

      【解决方案2】:

      如果你想从 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();
              ...
      

      【讨论】:

      • 为什么要为此使用视图操作?只需像@BalusC 在另一个答案中那样初始化一个 sessionScoped bean 就足够了。无需为此使用 viewAction。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2013-05-11
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      相关资源
      最近更新 更多