Is it safe to manually start a new thread in Java EE? (3个答案)
How can server push asynchronous changes to a HTML page created by JSF? (4个答案)
3年前关闭。
我在Web应用程序中使用JSF 2.2,PrimeFaces 6和Spring Framework 4.3。
用户登录后将被重定向到主页。在主页中,加载了一些图表,表格等。它们显示一些实时信息,并且需要花费一些时间来加载主页。我不希望用户在登录页面中等待太长时间。因此,我使用以下代码在页面加载后加载图表,如
here所述:
<h:form id="hiddenForm" style="display: none;">
<p:remoteCommand name="onload" actionListener="#{homeMB.onload}"
update=":firstChartForm :secondChartForm :thirdChartForm" global="false"/>
</h:form>
这是支持bean的onload方法:
public void onload() {
fillFirstChart(); //Takes 5 seconds
fillSecondChart(); //Takes 1 second
fillThirdChart(); // Takes 3 seconds.
}
图表由这些方法填充,并在
update
的
p:remoteCommand
参数的帮助下进行更新,但需要9秒钟。我想同时运行这些方法,并在数据加载后立即使用相应方法提供的数据更新每个图表。
我的意思是,用户应在单击登录按钮后立即将其重定向到首页,并且在首页中,应首先在1秒内填充/更新SecondChart,然后在2秒后填充/更新ThirdChart,最后应在2秒后,FirstChart填充/更新。因此,总共大约需要5秒钟。
编辑: This answer对我不起作用,因为当我异步加载图表时,JSF等待最慢的图表来全部更新它们。好的,它总共花费了5秒而不是9秒,但是正如我所说的:“首先,应该在1秒内填充/更新SecondChart,然后在2秒后填充/更新ThirdChart,最后在2秒后应填充FirstChart/更新”。但是,如果我采用第一个答案中所述的方法,它们将在5秒钟内全部更新
This answer可能适用。我的意思是,一旦用户单击登录按钮,服务器就可以收集数据并将其推送到图表,并且可以通过
RequestContext.getCurrentInstance().update("foo:bar");
从后备bean更新数据,如
here所示。但是我认为可能会有一些更简单的方法,因为我认为很多人以前可能也遇到过类似的问题。
谢谢。