【问题标题】:Loading data after a JSF page has completed rendering在 JSF 页面完成渲染后加载数据
【发布时间】:2011-08-15 06:24:17
【问题描述】:

我正在使用 Richfaces 4 和 Mojarra 2.0.4。所以如果答案是针对 Richfaces 4 框架的,我会很高兴:)

我了解 JSF 组件是在服务器端处理的。我的一些页面确实以数据为中心。因此,当我加载该页面时(例如:在带有 switchType ajax 的 RichTab 中),我的 bean 需要很长时间才能执行标有@PostConstruct 的方法来执行和获取数据。因此,用户单击选项卡标题和实际页面呈现之间的时间段非常长,用户体验非常糟糕。我已经为页面中的数据表实现了延迟加载,但这仍然没有优化我的页面加载时间,因为@PostConstruct 仍然存在。

无论如何我可以先加载页面,然后使用 ajax 获取数据并更新页面吗?这个加载时间对用户来说真的很烦人。感谢任何帮助:)

PS:我想过使用rich:tab 的oncomplete 和onbeforedomupdate 客户端事件,并调用用a4j:function 声明的ajax 函数。但似乎这些事件是在页面实际切换之前触发的。

【问题讨论】:

    标签: ajax jsf-2 richfaces lazy-loading


    【解决方案1】:

    在 html 中使用<body> 标记的onload 事件以及<a4j:jsFunction>

    如果您在调用方法之前仍然觉得您的页面没有完全渲染,那么请先使用onload 中的setTimeout('a4jfunctionName',10) javascript 函数完成渲染。

    【讨论】:

    • 感谢您的回答!但是,如果我们要使用 onload 事件,我将不得不根据加载的选项卡检查哪个 bean 的哪个方法来调用。对吗?但你的回答只是给了我一个想法!我可以在 rich:tab 和 setTimeout 上使用 oncomplete!会尝试回来。 :)
    • @Nikhil - 是的,没错,否则你将不得不同时加载所有数据,祝你好运:)
    • 刚刚发现第一个选项卡的 oncomplete 方法没有被执行!如果我切换到其他选项卡并返回第一个选项卡,则只有第一个选项卡的 oncomplete 才会执行。所以我不能在第一个选项卡上使用这个策略。 :|
    • 终于可以拿到了。在特定页面的 $(document).ready 中调用 a4j:jsFunction。例如:如果我的第一个标签 laods 页面 tab1.xhtml 然后将调用 loadTab1() 放在 tab1.xhtml 中定义的 $(document).ready 中。也不必使用延迟:)
    • @Nikhil- 是的,如果您使用了jQuery,那么这是一个更好的策略,您可以使用onload 事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多