首页 > 解决方案 > XPages:在进行部分刷新时优化大型表单

问题描述

我们有一个 XPage 应用程序,其中包含很多表单。一切都是动态的,这意味着表单内容来自 Notes 中的一个或多个表单定义文档(可以说我们构建了自己的“设计器”环境):字段是动态的、选项卡、列表等......现在,碰巧,我们有这个包含一百多个字段的巨大表格,其中许多是下拉的,还有很多动态的选项。

它有效,但速度很慢。当下拉字段更改时,它会触发部分刷新并部分执行最近的选项卡。但是当我们查看日志时,部分执行会影响第一阶段的执行。在渲染期间,我们的 Java 代码重新计算整个表单和所有选项卡上的所有字段。我们已经使用了相位监听器。

@53.604:APPLY_REQUEST_VALUES,从遍历所有字段 (~1s) 开始,然后仅继续处理一个选项卡上的字段。到目前为止很棒。

@55.057:PROCESS_VALIDATIONS,仅限选项卡。出色的。

@55.338:UPDATE_MODEL_VALUES,仅限选项卡。胀。

@55.495:INVOKE_APPLICATION,仅限选项卡。完美的。

@55.651:RENDER_RESPONSE,整个表单都被处理了。

@59.121:处理结束

我的问题:我们可以在代码中添加一些快捷方式,这样它就可以跳过对不变的选项卡和字段的评估吗?

例如,是否有可能使用一些内置方法来确定 XPages 是否正在执行部分刷新,以及哪个元素?

感谢你的协助。

标签: javaxpages

解决方案


选项卡式表格在 Web 上效果不佳,这也是原因之一。我建议进行重构,以便您的应用程序使用“向导式”方法,其中它是一个 XPage,每个选项卡都位于自定义控件上,并且只加载一个自定义控件。这需要更改您的导航以重新加载页面并使用一些后端方法来识别“草稿”(即并非所有已访问和验证的选项卡)并完成。但它也消除了用户完成所有选项卡、提交和“保存”请求失败的风险,这意味着他们将丢失输入的所有内容。

其他可能有用的方法是使用动态内容控件一次加载一个选项卡(以前访问的选项卡仍然在组件树中,但尚未访问的选项卡不会)或使用 execMode 来限制服务器过程。但是,您需要确保您需要处理的所有内容都在 execMode 中,因此可能需要对您的页面进行一些重组。


推荐阅读