0

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

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

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

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

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

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

4

1 回答 1

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;
  }
}
于 2011-01-11T01:03:36.133 回答