【问题标题】:Close XPages ExtLib dialog from inside iframe从 iframe 内部关闭 XPages ExtLib 对话框
【发布时间】:2016-10-25 11:57:10
【问题描述】:

我在 XPage 中打开了 db1.nsf/doc1。 XPage 上是同一服务器上相关文档 (db2.nsf/doc2) 的视图。我正在使用一个重复控件,每个条目周围都有一个链接,以在 ExtLib 对话框中打开 doc2。

注意:因为 doc2 上有 fileUpload 和 fileDownload 控件,所以我必须在对话框 (v8.5.3) 的 iframe 中打开 doc2。多亏了 Toohey 的文章 File Upload XPage Forms via OpenNTF.org Extension Library Dialogs,我的所有文件上传/下载工作都正常了。

问题是我无法使用对话框中 iframe 中的按钮关闭对话框。我的场景与 Toohey 的不同之处在于,我在 2 个不同的数据库中处理 2 个不同的文档。父打开器是 db1 中具有数据源 doc1 的 XPage,而对话子是 db2 中的 doc2。我似乎无法从 iframe 的子文档中获取父文档的句柄,因此我可以关闭对话框。它看起来像这样:

<html><body>
<form action="db1.nsf/mainDoc.xsp?doc1&action=openDocument"></form>
<div id="dialog">
    <form action="db1.nsf/mainDoc.xsp?doc1&action=openDocument">
        <iframe src="showDialog.xsp?databaseName=db2.nsf&doc2">
            <html><body>
                <form action="db1.nsf/showDialog.xsp?databaseName=db2.nsf&doc2&action=editDocument">
                    <button id="okBtn" type="submit">OK</button>
                </form>
            </body></html>
        </iframe>
    </form>
</div>
</body></html>

*注意:showDialog.xsp 是 db1 中的一个 XPage,它的数据源是 db2.nsf/doc2。 (我正在使用带有 tagName="iframe" 的 xp:panel。)

我想要 OK 按钮来保存文档(它会这样做)并关闭对话框(它不会)。我已经尝试了几种不同的“父母......”方法来处理并关闭它 - 根本没有成功。

如何从 iframe 中获取对话框元素的句柄以便关闭它?

*添加的服务器版本。

【问题讨论】:

    标签: javascript iframe dialog xpages xpages-extlib


    【解决方案1】:

    XPages 扩展库对话框的工作方式是它运行 SSJS,然后调用view.postScript() 将 CSJS 传回浏览器以关闭对话框。你需要重现它。 (我不确定您使用的是什么服务器版本,但 view.postScript() 仅在 8.5.3 中添加,可能用于对话框用例。)

    我不熟悉您正在使用的功能,但 9.0.1 提供了在部分刷新内上传附件的功能,这解决了 Ext Lib 对话框的解决方法。

    可以计算数据源的databaseName 属性(格式为serverName!!filePath),因此位于单独数据库中的数据应该不是问题。事实上,我现在构建的大多数应用程序都将 XPage 分成一个 NSF,而将数据/表单/视图/代理分成另一个。无论如何,Bluemix 上的 XPages 都需要该应用程序架构,并且是其他 Web 应用程序开发的标准。

    【讨论】:

    • 我不知道如何在这里使用view.postScript()。这与使用 OK 按钮上的 onComplete 事件来获取对话框元素的句柄并关闭它有什么不同?我的问题似乎是我无法在 iframe 内处理来自&lt;button id="okBtn" type="submit"&gt;OK&lt;/button&gt;&lt;div id="dialog"&gt;。不管我怎么写,parent.document.getElementById('#{id:dialog}') 都是空的
    • 这是一个扩展库对话框(xe:dialog 在 Domino Designer 中源窗格的 XML 标记中)还是带有 ID 的普通 HTML div? "#{id:....}" 是在 服务器 而不是 浏览器 上运行的代码,用于计算 XPages 控件的运行时 ID。它无法处理普通的 HTML div。
    • onComplete 无论成功与否都会运行。提交将发布到服务器并返回一些东西,这可能是一个验证错误。如果保存成功,您只想关闭。然后,只有这样您才想关闭对话框。 view.postScript() 在 SSJS 中,但听起来您使用的是基本 HTML。我认为这个问题可能与 iframe 而不是 XPages 组件有关。很难看到更广泛的系统架构,但我的建议是确保两个 XPage 都在同一个 NSF 中,这将大大简化 XPage 组件的使用。
    • 在单独的注释中,可能相关,通过使用两个不同的 NSF,单个网页具有两组不同的 applicationScope、sessionScope、viewScope 等。另一个,将所有 XPage 合并到同一个 NSF 中的另一个原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2016-05-12
    • 2012-12-29
    • 2011-05-22
    • 2012-06-07
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多