在服务器端处理时从 Extension Libray 显示对话框

Show Dialog Box from Extension Libray while server side processing

我有一个 XPage,它在 beforeRenderResponse 事件中包含将数据导出到 Excel 的代码。

我希望在导出开始之前显示我从扩展库创建的 "Please wait..." 对话框。我试过 getComponent("dialogbox").show() 但它似乎在导出开始之前忽略了该行。

对于如何在 SSJS 或 CSJS 中的 XPage 上显示对话框,您有什么建议吗?预先感谢您的帮助。

编辑以添加 XPage 和客户控制代码。

XPages 代码:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false"
    xmlns:xc="http://www.ibm.com/xsp/custom"
    xmlns:xp_1="http://www.ibm.com/xsp/coreex">
    <xp:this.resources>
        <xp:script src="/Web Report Functions.jss"     clientSide="false"></xp:script>
    </xp:this.resources>
    <xp:this.afterRenderResponse><![CDATA[#{javascript:/*...(export to excel code)...*/}]]></xp:this.afterRenderResponse>
    <xc:WaitDialogBox></xc:WaitDialogBox>
    <xp:scriptBlock id="showDialog">
        <xp:this.value><![CDATA[XSP.addOnLoad(function(){XSP.openDialog("#{id:WaitDialog}");});]]></xp:this.value>
    </xp:scriptBlock>
</xp:view>

自定义控件代码"WaitDialogBox":

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xe:dialog id="WaitDialog" title="Please wait...">
    <xp:table>
    <xp:tr>
    <xp:td>
    Processing....
    <xp:br></xp:br>
    <xp:br></xp:br>
    Please wait until you see the &quot;Do you want to open or save...&quot; bar on the bottom of your screen.
    <xp:br></xp:br>
    </xp:td>
    </xp:tr>
    <xp:tr>
    <xp:td style="padding-top:10px;margin-top:10px;text-align:center;">
    <xp:image url="/ajax-loader.gif" id="processImage"></xp:image>
    </xp:td>
    </xp:tr>
    </xp:table></xe:dialog>
</xp:view>

您是否只想在页面加载时收到请稍候消息?如果是这样,比九中的注释广播有更好的方法来做到这一点。在这种情况下,您不想使用对话框。 http://www.notesin9.com/2014/04/07/notesin9-142-adding-a-please-wait-to-xpages/

所以如果你想在导出的时候显示一条消息运行(不管是Howard提出的消息、对话框还是dojo standby),你必须确保页面先加载而不是执行导出然后开始导出。

在我的示例页面上查看视图标记上呈现的 属性。我在那里检查请求 url 中是否包含参数 export。这也是在 afterRenderResponse 事件开始时完成的。

然后在 showDialog 脚本块中,我打开对话框并通过添加 ?export=true 更改当前 window 的 url。您可以自由地将对话框替换为其他任何内容。使用此解决方案,无法在导出完成并准备好下载时执行某些操作(即关闭对话框)。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xc="http://www.ibm.com/xsp/custom"
    rendered="#{javascript:param.get('export') != 'true'}">
    <xp:this.afterRenderResponse><![CDATA[#{javascript:
    if(param.get('export') == 'true'){
        /*...(export to excel code)...*/
    }}]]></xp:this.afterRenderResponse>
    <xc:WaitDialogBox></xc:WaitDialogBox>
    <xp:scriptBlock id="showDialog">
        <xp:this.value><![CDATA[
XSP.addOnLoad(function(){
    XSP.openDialog("#{id:WaitDialog}");
    location.href='#{javascript:return context.getUrl().getPath()}?export=true';
});]]></xp:this.value>
    </xp:scriptBlock>
</xp:view>