也许这个标题不是很精确,但这就是问题所在。 我正在做一些JSF项目,我需要一个以下内容:
当用户登录我的应用程序时(即,当他导航到主页时),需要调用从互联网和/或数据库获得一些货币兑换率的方法。该方法的执行(页面解析,数据保存等)持续约5-6秒。我不希望从登录到主页的导航持续5-6秒,我想要其中一个(还没决定哪一个)发生:
1)当用户登录时,他会看到主页(立即,而不是5-6秒后),并且能够在方法在后台工作时单击和/或导航。
2)当用户登录时,他会看到主页(立即),在页面的一个部分加载一些标志,并且在执行方法后,他会看到具有汇率的dataTable。
问题是,如何做到这一点? 如果我将该方法放在HomePageBean构造函数中,则在执行方法之前不会显示页面。也许我可以在主页上放置一些不可见的元素,并在一些Getter中调用该方法,但我不知道这是否是正确的方法(似乎是黑客)或它是否真的有用。
我正在使用JSF 2.0和Primefaces。 提前致谢
答案 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;
}
}