XPages 扩展库数据视图控件确认复选框选择的计数

XPages Extension Library Data View Control Confirm Count of Checkbox selection

我有一个带数据视图控件的 xpage,它启用了显示复选框和显示 header 复选框。我希望能够在用户单击提交按钮时向他们提供包含 selected 文档计数的确认信息。

例子 "Are you sure you want to submit x number of documents?"

我的确认操作returns 0 不管我有多少文件select。我做错了什么?

<xp:confirm>
<xp:this.message><![CDATA[#{javascript:var dataView1:com.ibm.xsp.extlib.component.data.UIDataView = getComponent("dataView1");
var val = dataView1.getSelectedIds();
var len = val.length;
return "Are you sure you want to submit " + len +  " number of documents?";
}]]></xp:this.message>
</xp:confirm>

您 运行 遇到的直接问题是确认消息很可能是在第一次呈现按钮时计算的 - 也就是说,当没有检查任何文档时。

但除此之外,getSelectedIds 方法也很棘手:所选文档在每次请求后都会被清除,因此向服务器发出请求以获取所选 ID 计数的内容也会具有清除选择的副作用。

这里的方法可能是用这样的方法检查 client-side:

<xp:eventHandler ...>
    <!-- other action stuff here -->

    <xp:this.script><![CDATA[
        var count = dojo.query("tbody input[type='checkbox']:checked", dojo.byId("#{id:yourDataViewId}")).length;
        return XSP.confirm("Are you sure you want to submit " + count + " document" + (count == 1 ? "" : "s") + "?");
    ]]></xp:this.script>
</xp:eventHandler>

那里的 Dojo 查询将搜索数据视图 body 部分内所有选中的复选框(排除 header 复选框),仅限于您想要的特定数据视图搜索。 XSP.confirm client-side 方法与 <xp:confirm/> 简单操作的思想相同,如果用户拒绝,从中返回值将取消提交。