模式对话框 - 如何在提交(登录)时显示"please wait"消息



我使用 an 在通过 JsonRpcService 运行一些代码时显示一条消息。就像一个魅力。

现在,我想显示一条类似的消息,说"请稍候..."当用户提交页面时。在这种特殊情况下,它正在登录 - 我需要读取大量数据来向用户显示。当用户按下图标(=按钮)时,我在自定义控件中提交登录信息:

<xp:image url="/arrowGrey.png" id="submitButton" styleClass="submitButton" alt="Login" title="Login">
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
        <xp:this.action><![CDATA[#{javascript:Logon.submit()}]]></xp:this.action>
        <xp:this.onStart><![CDATA[console.log('Start login');
setTimeout(function () {
    XSP.openDialog('#{id:working}');
}, 300);]]></xp:this.onStart>
    </xp:eventHandler>
</xp:image>

登录是托管的 Bean。但是,我从未看到对话框... - 也没有"开始登录"消息?

的定义是:

<xe:dialog id="working" styleClass="inProgress">
    <xp:div>
    <xp:text escape="true" id="computedField1" tagName="h2" value="Logging in. Please wait..."></xp:text>
    </xp:div>
</xe:dialog>

关于如何获得这个的任何想法?

显而易见的下一个挑战是关闭对话框,如果 Logon.submit() 验证失败并将用户留在当前页面上...... :-)

如果您正在执行完全刷新,则备用小部件将不起作用。 它仅适用于部分刷新,因为完全刷新将重新加载页面上的所有内容。但是备用小部件使用的是您可以使用的标准 Dojo 函数。

或者当我有一些代码需要执行时,我通常会做什么。我将用户发送到带有动画 gif 的"请稍候 XPage"。诀窍是代码无法在页面和加载 gif 之前开始执行,因此我将代码添加到隐藏按钮,并在 onload 事件中使用执行后端代码的客户端 JS 单击此按钮。当我完成处理后,我使用context.reloadPage将它们发送到正确的页面。

这效果很好。

Fredrik Norling创建了非常酷的"待机自定义控件"(http://openntf.org/XSnippets.nsf/snippet.xsp?id=standby-dialog-custom-control)。它不会显示一条消息,而是在每次部分刷新时显示一个旋转的等待图标,该图标可能会持续更长时间,长达 200 毫秒(如果需要,您可以向下或向上调整)。

最新更新