JSF 页面完成渲染后加载数据
我正在使用 Richfaces 4 和 Mojarra 2.0.4。因此,如果答案特定于 Richfaces 4 框架,我会很高兴:)
我知道 JSF 组件是在服务器端处理的。我的一些页面确实以数据为中心。因此,当我加载该页面时(例如:在带有 switchType ajax 的 richTab 内),我的 bean 需要花费大量时间来执行标有 @PostConstruct
的方法来执行和获取数据。因此,用户点击选项卡标题和实际页面渲染之间的时间间隔相当长,用户体验非常糟糕。我已经在页面中实现了数据表的延迟加载,但这仍然没有优化我的页面加载时间,因为 @PostConstruct
仍然存在。
无论如何,我可以先加载页面,然后使用ajax获取数据并更新页面吗?这个加载时间对用户来说真的很烦人。任何帮助都值得赞赏:)
PS:我想到使用 rich:tab< 的
oncomplete
和 onbeforedomupdate
客户端事件/code> 并调用使用 a4j:function
声明的 ajax 函数。但这些事件似乎是在页面实际切换之前触发的。
I'm using Richfaces 4 and Mojarra 2.0.4. So I'll be glad if the answer is specific to Richfaces 4 framework :)
I understand that the JSF components are processed at the server side. Some of my pages are really data centric. So when I load that page (eg: inside a richTab with switchType ajax), it takes a lot of time for my bean to execute the method marked with @PostConstruct
to execute and fetch data. And hence the time period between user clicking on the tab's header and actual page rendering is quite large, a really bad user experience. I've implemented lazy loading for the dataTables in the page but that still doesn't optimize my page load time since @PostConstruct
is still there.
Is there anyway I can load the page first and THEN fetch the data with ajax and update the page? This loading time is really annoying for the user.Any help appreciated :)
PS: I thought of using the oncomplete
and onbeforedomupdate
client side events of rich:tab
and call ajax functions declared with a4j:function
. But it seems that these events are fired before the page is actually switched.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
请在 html 中使用
标记的
onload
事件以及如果您仍然感觉页面未完全渲染, 在调用该方法之前,先使用
onload
中的setTimeout('a4jfunctionName',10)
javascript 函数完成渲染。use
onload
event of<body>
tag in html along with<a4j:jsFunction>
If you still feel your page is not rendering completely before the method called then use
setTimeout('a4jfunctionName',10)
javascript function inonload
to complete the rendering first.