2016-01-06 68 views
0

我有一个XPage与一些SSJS代码,我想执行一个完整刷新的情况。 (如果它在初始页面加载时执行也是可以的,我猜)。如果在页面上发生页面上组件的部分刷新,那么我不希望代码执行。有可能区分这些情况吗?感觉就像我需要在viewScope中设置一个状态变量来做到这一点。执行XPages SSJS代码是否完成刷新,而不是部分刷新?

对于上下文,局部刷新是用户单击寻呼机的链接以浏览视图元素的块。 intitial/complete refresh case在视图上执行FTSearch。这应该只在用户单击用于过滤视图的页面上的其他链接时才能完成。

XPages生命周期和事件处理程序在某些方面仍然是个谜。

回答

3

将您的SSJS添加到beforePageLoadafterPageLoad,具体取决于可用的项目)。这些事件仅在初始页面加载期间触发,您可以通过将print("Running beforeRenderResponse");添加到事件并查看服务器控制台来看到这些事件。

如果您想再次运行代码,请在末尾使用context.reloadPage();

refreshMode="partial"refreshMode="complete"处理相同的XPages生命周期。

+0

谢谢,保罗。很长一段时间以来,我认为部分和完全遵循相同的生命周期是不正确的。我只是假设出于某种原因,“完成”与context.reloadPage()类似。顺便说一句,这引起了另一点混乱;如果我做context.reloadPage(),我会失去viewScope的内容吗? –

+0

正确。它加载组件树的单独实例(页面的服务器端映射),而不是拾取预先存在的实例。你可以设置一个sessionScope变量,并且在beforePageLoad中,然后移除它/将它移动到viewScope。 –