JSF:在backingBean仍在工作时显示页面

时间:2011-01-11 00:46:35

标签: ajax jsf-2 primefaces backing-beans

也许这个标题不是很精确,但这就是问题所在。 我正在做一些JSF项目,我需要一个以下内容:

当用户登录我的应用程序时(即,当他导航到主页时),需要调用从互联网和/或数据库获得一些货币兑换率的方法。该方法的执行(页面解析,数据保存等)持续约5-6秒。我不希望从登录到主页的导航持续5-6秒,我想要其中一个(还没决定哪一个)发生:

1)当用户登录时,他会看到主页(立即,而不是5-6秒后),并且能够在方法在后台工作时单击和/或导航。

2)当用户登录时,他会看到主页(立即),在页面的一个部分加载一些标志,并且在执行方法后,他会看到具有汇率的dataTable。

问题是,如何做到这一点? 如果我将该方法放在HomePageBean构造函数中,则在执行方法之前不会显示页面。也许我可以在主页上放置一些不可见的元素,并在一些Getter中调用该方法,但我不知道这是否是正确的方法(似乎是黑客)或它是否真的有用。

我正在使用JSF 2.0和Primefaces。 提前致谢

1 个答案:

答案 0 :(得分:0)

使用ApplicationScoped bean,如下例所示:

@ManagedBean(name = "exchRateBean", eager = true)
@ApplicationScoped
public class ExchRateBean  {

  public List<Rate> getRates(Date date) {
    // cached data or DAO methods here
  }

  @PostConstruct
  public void init() {
    // Initial web-app initialization, will run once upon deploy
  }
}

这是你的访问bean访问应用程序范围的bean。

@RequestScoped
public class MyBean  {
  @ManagedProperty(value="#{exchRateBean}")
  private ExchRateBean exchRateBean;

  // your JSF methods
  public List<Rate> getRates(Date date) {
    return getExchRateBean().getRates(date);
  }

  // G&S
  public ExchRateBean getExchRateBean() {
    return exchRateBean;
  }

  public void setExchRateBean(ExchRateBean exchRateBean) {
    this.exchRateBean = exchRateBean;
  }
}