XPages扩展库对话框控制和更新“父”文档

时间:2012-10-10 14:08:18

标签: xpages xpages-extlib

我有一个XPage,带有扩展库中的Dialog控件。

对话框工作正常 - 打开,执行它需要做的事情,但是,当我尝试更新“父”文档时,它不起作用。

我将XPage数据源称为Domino文档,名为document1。我在阅读后添加了这个: When I save a document from an extension library dialog box some values are blank

<xp:this.data>
<xp:dominoDocument var="document1" formName="speakerReq"></xp:dominoDocument
</xp:this.data>

在对话框控件上,我有一个Search按钮,它调用一个servlet并返回被解析并构建到HTML表中的JSON。第一个单元格是一个链接,它在单击时从客户端JavaScript库调用函数。该函数是使用返回的JSON中的值更新“父”文档,并关闭对话框。

当我在该函数中只使用alert()语句进行测试时,它可以调用该函数,但是,当我尝试更新“父”文档时,它无法识别。

我试图传递“document1”对象但是一旦我进入对话框,就说它不存在,所以链接失败了。

以下是构建链接的代码段:

        // Let's build the row...
        cell = document.createElement("td");
        resultLink = document.createElement("a");
        resultLink.setAttribute("class", "linkText");
        resultLink.setAttribute("href", "#");
        resultLink.setAttribute("onclick", "javascript:updateDocument(document1, '" + bpName + "', '" + bpEmail + "', '" + bpPhone + "', '" + bpTitle + "', '" + bpCountry + "', '" + bpLoc + "');");
        resultLink.appendChild(document.createTextNode(bpName));
        cell.appendChild(resultLink);
        row.appendChild(cell);

如何在客户端获取document1对象的句柄,以便我可以在“父”文档上更新这些字段并关闭对话框?

代码:

function updateDocument(doc, name, email, phone, job, country, location) {

var thisField;

// Need to update the document with the selected values...
thisField = doc.getElementById("#{id:sr_Name1}");
thisField.value = name;

thisField = doc.getElementById("#{id:sr_Title1}");
thisField.value = email;

thisField = doc.getElementById("#{id:sr_Phone1}");
thisField.value = phone;

thisField = doc.getElementById("#{id:sr_Email1}");
thisField.value = job;

thisField = doc.getElementById("#{id:sr_Location1}");
thisField.value = location + " - " + country;

} 

谢谢!

1 个答案:

答案 0 :(得分:1)

似乎你正在混合使用CSJS和SSJS。代码段在浏览器中运行,但您尝试执行服务器端代码。这不行。您需要将数据回发到服务器并在那里处理数据。 XPages Wiki有some ideas你可能会觉得有用。

<强>澄清

经验法则:浏览器中存在JavaScript的任何内容都不能包含SSJS。所以你可以使用任何DOM,但没有会话,数据库,document1等SSJS库对CSJS是不可见的,所以你不能调用这些方法。您可以在页面中有一个按钮,用于定义CSJS和SSJS。客户端将先执行然后再刷新(部分或全部)。

您的上述代码:getElementById是CSJS - &gt;不能在SSJS中使用它,而doc是NotesDocumentDatasource - &gt;没有getElementById。

此外:没有“父”元素。对话框只是本地DOM的另一部分(这不是NotesUIWorkspace.dialogbox)。检查XPagesWiki中的样本