2010-08-04 70 views
1

我有一个jsf页面,它有一个请求范围bean。缓慢的数据库查询在请求作用域bean的构造函数中触发。然后,查询结果显示在网页上的jsf数据表中。等待慢速JSF页面

如何在数据库查询完成之前显示等待消息?

我试过为onLoad标签调用javascript函数。只有在执行慢分贝查询后才调用该方法。

回答

2

缓慢的数据库查询正在服务器上发生,很久以前,构建好的页面才将其发送给浏览器。唯一的办法就是安排浏览器在之前显示“等待”消息,然后发起HTTP请求,以导致运行JSF页面。

然而,花时间在此的最好方法是修复查询。

+0

它是一个巨大的查询,我不能改变。那么,我可以使用你的方法,但我想我将不得不使用会话范围的bean。我错了吗? – outvik 2010-08-04 14:18:36

+0

与DBA交谈。你应该真的考虑DB级别的分页。现在,这听起来很像是你将整个数据库表中有成千上万的记录复制到每个单独的最终用户的Java内存中。这可能会在大量使用/访问时迟早打开您的应用程序。 – BalusC 2010-08-04 14:23:19

+0

BalusC,你说得对。 DB分页必须更高效。我正在通过您的博客进行举例。 – outvik 2010-08-04 17:15:03

1

您必须首先加载“等待页面”,然后在该页面的onLoad中加载执行DB查询的页面。如果查询速度快,用户不会看到太多闪烁,因为现代浏览器(除IE6以外的任何东西)。

或者,您可以将结果载入隐藏的iframe,并在页面中显示“请稍候”。当iframe代码加载,你可以把它用parent访问父文档可见:

parent.getElementById('frame').styles.display = ''; 
parent.getElementById('wait').styles.display = 'none'; 

(把这种在JSP这是iframe内的onLoad)。