在服务器端处理时从 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 "Do you want to open or save..." 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>
我有一个 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 "Do you want to open or save..." 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>