1

我在 BeforePageKoad 事件中运行了一个 SSJS。作为 SSJS 的最后一步,我想做部分刷新。在我的脚本中,我有这行代码:

view.postScript("partialRefreshGet('#{id:panelAll}')")

当它执行时,我收到一个错误,指出 partialRefreshGet 未定义。我猜我在通话格式中遗漏了一些东西,但据我了解,这应该可以。以前有人做过这样的事情。如果我忽略此代码,则从按钮手动刷新 panelAll 一切正常。

4

3 回答 3

4

不能在 beforePageLoad 中使用 before view.postScript。尝试将其移至 afterPageLoad 或 beforeRenderResponse。我最近遇到了同样的问题。

http://notesspeak.blogspot.com/2013/08/viewpostscript-only-works-for-certain.html

这是您可以使用 view.postScript() 的摘要:

  1. onClientLoad = 没有任何反应
  2. beforePageLoad = XSP 错误
  3. afterPageLoad = 工作!
  4. afterRestoreView = 没有任何反应
  5. beforeRenderResponse = 工作!
  6. afterRenderResponse = 没有任何反应

要了解发生这种情况的原因,请阅读博文底部的 Tim Tripcony 评论。

于 2013-09-20T21:24:11.833 回答
3

只需将脚本块添加到您的 XPage 并进行所需的部分刷新。

编辑:

<xp:scriptBlock id="scriptBlock2" rendered="#{javascript:requestScope.doRefresh}">
    <xp:this.value><![CDATA[
       XSP.addOnLoad( function(){ XSP.partialRefreshGet('#{id:panelAll}') } );
   ]]>
   </xp:this.value>
</xp:scriptBlock>

如果需要,然后在beforePageLoad中设置 requestScope 变量。

于 2013-09-22T05:03:32.470 回答
1

这个答案可能有点太晚了,我希望它对某人有用。

因此,简单的答案是使用以下 SSJS 刷新另一个组件: view.postScript("XSP.partialRefreshGet('#{id:Component ID}')")

但是,我在尝试它时遇到了麻烦,正如 Tim Tripcony 所建议的那样,代码似乎运行得太快了,而浏览器仍在接收第一次刷新,并且它不起作用。所以我尝试将它附加到 OnLoad 事件中,如下所示:

view.postScript("XSP.addOnLoad(function() {XSP.partialRefreshGet('#{id:Component ID}')})")

但这也没有用。所以我用旧方法做了,它通过使用setTimeout()让脚本在不同的线程中工作,如下所示:

view.postScript("setTimeout(function(){XSP.partialRefreshGet('#{id:Component ID}')}, 1)");

它就像一个魅力!

于 2015-09-28T14:35:31.670 回答