javascript - 如何在xPage的viewPanel上获取外部源数据的选定文档?

标签 javascript xpages

这是我的简单观点,即使用 JDBCQUERY 作为源数据。它显示每一行都有一个复选框,以便您可以选择:

<?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">
    <xp:viewPanel rows="30" id="viewPanel1" showColumnHeader="false">
        <xp:this.data>
            <xe:jdbcQuery var="view1" scope="request">
                <xe:this.sqlQuery><![CDATA[#{javascript:"SELECT COLUMN1 FROM MYTABLE"}]]></xe:this.sqlQuery>
                <xe:this.connectionName><![CDATA[#{javascript:"DB2"}]]></xe:this.connectionName>
            </xe:jdbcQuery>
        </xp:this.data>

        <xp:viewColumn columnName="COLUMN1" id="viewColumn1" showCheckbox="true">
            <xp:viewColumnHeader id="viewColumnHeader1" rendered="false"></xp:viewColumnHeader>
        </xp:viewColumn>
    </xp:viewPanel>
</xp:view>

现在要获取选定的文档,我使用方法/按钮:

var viewPanel=getComponent("viewPanel1");
var docIDArray=viewPanel.getSelectedIds();
for(i=0;i < docIDArray.length; i++){
    print(docIDArray[i]);
}

由于它不是 NotesView/NotesDocument 数据,因此它仅返回所选行的行号(不是文档 UNID)... getSelectedIds() 返回所选行 1 和 3。

现在如何获取所选行的列值(value2 和 value4)? 是这样的吗:getRow(3).getColumValues()...?

     COLUMN1
[ ]  value1
[x]  value2
[ ]  value3
[x]  value4
[ ]  value5

最佳答案

我认为<xp:viewPanel>不适合该任务。 我会把它改成 <xp:dataTable> ,不过,到那时你需要重新实现选择机制。不管怎样,在 View 作用域 bean 的帮助下,它可能是这样的:

<xp:this.data>
    <xe:jdbcQuery var="query" scope="request" connectionName="DB2"
        sqlQuery="SELECT COLUMN1 FROM MYTABLE" loaded="false" />
</xp:this.data>

<xp:dataTable id="dataTable1" binding="#{dataTable}"
    value="#{query}" var="row" indexVar="rowIndex">
    <xp:column id="column1">
        <xp:checkBox id="checkBox1"
            value="#{myBean.jdbcSelectedValues[rowIndex]}" uncheckedValue="false"
            checkedValue="true">
            <xp:this.converter>
                <xp:convertBoolean />
            </xp:this.converter>
        </xp:checkBox>
    </xp:column>
    <xp:column id="column2">
        <xp:text value="#{row}" />
    </xp:column>
</xp:dataTable>

<xp:button id="button1" value="print selected">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="partial" refreshId="dataTable1"
        action="#{myBean.printSelectedColumnValues}">
    </xp:eventHandler>
</xp:button>

View 范围 bean

private List<String> jdbcValues;
private Map<Integer, Boolean> jdbcSelectedValues;

public Map<Integer, Boolean> getJdbcSelectedValues() {
    if (jdbcSelectedValues == null) {
        jdbcSelectedValues = new HashMap<Integer, Boolean>();
    }

    return jdbcSelectedValues;
}

public void printSelectedColumnValues() {
    List<String> values = new ArrayList<String>();

    XspDataTableEx dataTable = (XspDataTableEx) FacesUtil.resolveVariable(FacesContext
            .getCurrentInstance(), "dataTable");
    List<?> wrappedData = (List<?>) dataTable.getDataModel().getWrappedData();

    for (Map.Entry<Integer, Boolean> entry : getJdbcSelectedValues().entrySet()) {
        if (entry.getValue()) {
            values.add((String) wrappedData.get(entry.getKey()).getColumnValue("COLUMN1"));
        }
    }

    System.out.println(values);

    jdbcSelectedValues.clear();
}

这个想法是通过 binding 来获取数据表的句柄。属性(不是真正的正统方法,我个人不使用这些忽视 MVC 模式的混合方法)并访问它包含的包装数据:除了行集之外什么都没有的包装数据。

警告我唯一不确定的是dataTable.getDataModel().getWrappedData()到底是什么。 。在进行任何转换和后续工作之前,您可能想尝试打印类名称。但意义在于,通过索引号和包装的数据,您应该能够获取行。

关于javascript - 如何在xPage的viewPanel上获取外部源数据的选定文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44465543/

相关文章:

javascript - 在 adobe pro 中复制粘贴动态图章

javascript - 如何获取asyncstorage中的值项?

javascript - 无法访问 IE 中另一个域设置的 cookie

javascript - 如何将对象推送到 Vue.js 中的现有数组

ckeditor - Xpages - CKEditor 中的富文本验证...丢失内容

javascript - 使用 XPage 从数据表中的选定文档创建响应文档

xpages - 如何延迟在 Xpage 中打开 View

validation - 如何禁用 XPage 的客户端验证?

arrays - 使用大型 SSJS 数组时发生 ArrayIndexOutOfBoundsException

javascript - 如何在 querySelectorAll 返回的伪数组上使用 forEach?