1个按钮,2 x部分刷新和文档保存

时间:2012-07-05 07:26:14

标签: xpages

我想通过1个按钮的onclick进行2次部分刷新和1个文档保存。 我怎么能这样做? 到目前为止我尝试了什么:

  1. 在CCJS中,没有到服务器的总和

    XSP.partialRefreshGet("#{id:PanelSubitem}", {
        onComplete: function() {
             XSP.partialRefreshGet("#{id:PanelSubsubitem}", {
                 onComplete: function() { 
                '#{javascript:document1.save()}';
                }
            });
        }
    });
    

    结果:2次刷新工作但文档没有保存(正常,因为你无法使用ccjs访问后端。

  2. 将相同的代码放在SSJS中,使用部分refesh或完全刷新

    结果:首先单击按钮刷新第一个面板,然后停止。第二次刷新将更新第二个Panel并停止。第三次单击按钮将保存文档。 (这也是正常的,因为部分或完全刷新代码与服务器选项的部分或完全刷新冲突,因为您一次只能刷新1次)

  3. 所以,如果我不能在SSJS中做到这一点而我无法在CSJS中做到这一点,我该怎么办呢?

3 个答案:

答案 0 :(得分:1)

您可以尝试创建一个“保存”按钮,该按钮可以在通过CSJS完成第二次部分刷新后保存文档并自行部分刷新。所以你的代码片段会是这样的:

XSP.partialRefreshGet("#{id:PanelSubitem}", {
   onComplete: function() {
      XSP.partialRefreshGet("#{id:PanelSubsubitem}", {
         onComplete: function() { 
            document.getElementById("#{id:btnSave}").click();
         }
      });
   }
});
<xp:button value="Save" id="btnSave">
    <xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="btnSave">
        <xp:this.action><![CDATA[#{javascript:document1.save()}]]></xp:this.action>
    </xp:eventHandler>
</xp:button>

您可以使用CSS隐藏“保存”按钮。

答案 1 :(得分:0)

一种可能的方法是利用CSJS后跟SSJS运行的事实。 SSJS只会运行CSJS返回true。

因此,对于您的按钮,您将现有的双部分刷新代码作为客户端代码添加到按钮的onClick事件中(也许您还需要添加return true语句),然后添加您的文档将代码保存为SSJS到同一个onClick事件。

答案 2 :(得分:0)

  <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
            <xp:this.action>
                <xp:actionGroup>
                    <xp:executeScript>
                        <xp:this.script><![CDATA[#{javascript:document.save();}]]></xp:this.script>
                    </xp:executeScript>
                </xp:actionGroup>
            </xp:this.action>
        <xp:this.onComplete><![CDATA[(function(){
            XSP.partialRefreshGet("#{id:PanelSubItem}");
            XSP.allowSubmit();
            XSP.partialRefreshGet("#{id:PanelSubSubItem}");
          })();]]>
       </xp:this.onComplete>
    </xp:eventHandler>