xpages:多个部分刷新无法正常工作

时间:2014-03-16 18:37:11

标签: xpages

请帮忙。当我在xPages中运行单个XSP.partialRefreshGet并且它正在工作时。但是,在获得多个部分刷新时它不起作用。有什么不对吗?请帮助和谢谢。

<xp:scriptBlock id="scriptBlock1">
    <xp:this.value>
        <![CDATA[
        setInterval(function() {


XSP.partialRefreshGet("#{id:refreshPanel}", {
 onComplete: function() {
     XSP.partialRefreshGet("#{id:refreshPanel2}", {});
    }


} })
            }, 1000)
        ]]>
    </xp:this.value>
</xp:scriptBlock>

2 个答案:

答案 0 :(得分:11)

在进行部分刷新时,会在XSP对象中设置一个锁,该锁会停止所有partialRefreshes,直到当前正在运行的刷新完成或特定时间结束(默认为20秒)。

要更改此行为,您可以执行以下两项操作:

  1. 更改intervall
  2. 允许重新提交
  3. 但在这两种情况下,对于你的问题,这是 NOT 是一个很好的选择,因为这会在服务器仍在处理已经发送的请求时使用无用的请求充斥服务器。

    相反,您应该在刷新完成(或失败)时调用刷新。像这样:

    <xp:scriptBlock id="scriptBlock1">
       <xp:this.value>
          <![CDATA[
            function doIt(){
               XSP.partialRefreshGet("#{id:refreshPanel}", {
                  onError: "restart()",
                  onComplete: function() {
                     XSP.partialRefreshGet("#{id:refreshPanel2}", {
                        onComplete: "restart()",
                        onError: "restart()"
                     });
                  }
               });
            }
    
            function restart(){
               window.setTimeout( "doIt()", 1000 );
            }
    
            doIt();
        ]]>
    </xp:this.value>
    

    P.S。 我从脑中输入了这个,没有检查计算机上的代码。

答案 1 :(得分:0)

XPages从客户端强制执行部分刷新之间的20秒延迟。原因可以在XSPClientDojo.jscanSubmit()函数注释中找到:

  

这应该在任何页面提交之前调用,以防止页面重新提交,无论是当用户双击链接时是否意外,或者用户是否与页面刷新的预期时间相比不耐烦。   如果最近提交了该页面,则返回false,并且应该放弃提交。

要绕过此行为,您只需在两个XSP.allowSubmit()之间调用partialRefreshGet()即可。有些人喜欢这样:

<xp:scriptBlock id="scriptBlock1">
<xp:this.value>
  <![CDATA[
    setInterval(function() {
      XSP.partialRefreshGet("#{id:refreshPanel}");
      XSP.allowSubmit();
      XSP.partialRefreshGet("#{id:refreshPanel2}");
    }, 1000)
  ]]>
</xp:this.value>
</xp:scriptBlock>