Xpages Repeat控件绑定到Repeat集合中返回字符串的数组数组
我试图通过获取NotesViewEntryCollection,然后在该集合中循环以构建一个数组来显示repeat控件中视图的子集,该数组中的每个值都包含一个与条目中的列值对应的数组Xpages Repeat控件绑定到Repeat集合中返回字符串的数组数组,xpages,Xpages,我试图通过获取NotesViewEntryCollection,然后在该集合中循环以构建一个数组来显示repeat控件中视图的子集,该数组中的每个值都包含一个与条目中的列值对应的数组 <xp:view xmlns:xp="http://www.ibm.com/xsp/core"> <xp:repeat id="repeat1" rows="30" var="rowData" indexVar="rowIndex"> <xp:this.valu
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:repeat id="repeat1" rows="30" var="rowData" indexVar="rowIndex">
<xp:this.value><![CDATA[#{javascript:
var view:NotesView = database.getView("CatalogEntries");
var entryColl:NotesViewEntryCollection = view.getAllEntriesByKey(compositeData.catalog, true);
if (entryColl.getCount() == 0) return ["empty"];
var entries = [];
var columnVals = [];
var entry:NotesViewEntry = entryColl.getFirstEntry();
do {
columnVals = [];
columnVals.push(entry.getColumnValues()[0]);
columnVals.push(entry.getColumnValues()[1]);
columnVals.push(entry.getColumnValues()[2]);
columnVals.push(entry.getColumnValues()[3]);
columnVals.push(entry.getColumnValues()[4]);
columnVals.push(entry.getColumnValues()[5]);
entries.push(columnVals);
entry = entryColl.getNextEntry(entry);
} while(!(entry == null))
return entries;}]]></xp:this.value>
<xp:text escape="true" id="computedField1" value="#{javascript:rowData[rowIndex][0]}"></xp:text>
</xp:repeat>
</xp:view>
但我在这一行遇到了一个错误:
错误是:
Java类“Java.lang.String”中的未知成员“0”
关于如何解决这个问题,您有什么想法吗?在推送方法中,您不会传递数组索引
columnVals.push(entry.getColumnValues()[0]);
应该是
columnVals.push(entry.getColumnValues());
Howard在推送方法中,不传递数组索引
columnVals.push(entry.getColumnValues()[0]);
应该是
columnVals.push(entry.getColumnValues());
霍华德我觉得这不能——不应该要简化。基本思想是,您可以将Domino view数据源或整个
NotesViewEntryCollection
对象输入到repeat
对象中。这样,您将得到表示单个NotesViewEntry
对象的rowData
。然后,您的计算字段
值可以直接引用条目的列值
向量中的任何元素。这样,您甚至不必费心回收任何对象:
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoView var="myView" viewName="CatalogEntries" keys=compositeData.catalog keysExactMatch="true">
</xp:dominoView>
</xp:this.data>
<xp:repeat id="repeat1" rows="30" var="rowData" value="#{myView}">
<xp:panel id="pnInner">
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{javascript:
if(rowData){
return rowData.getColumnValues()[0].toString();
}else{
return "empty";
}}]]>
</xp:this.value>
</xp:text>
</xp:panel>
</xp:repeat>
</xp:view>
视图数据的过滤是在数据源级别完成的。我觉得这可以-不应该要简化。基本思想是,您可以将Domino view数据源或整个
NotesViewEntryCollection
对象输入到repeat
对象中。这样,您将得到表示单个NotesViewEntry
对象的rowData
。然后,您的计算字段
值可以直接引用条目的列值
向量中的任何元素。这样,您甚至不必费心回收任何对象:
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoView var="myView" viewName="CatalogEntries" keys=compositeData.catalog keysExactMatch="true">
</xp:dominoView>
</xp:this.data>
<xp:repeat id="repeat1" rows="30" var="rowData" value="#{myView}">
<xp:panel id="pnInner">
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{javascript:
if(rowData){
return rowData.getColumnValues()[0].toString();
}else{
return "empty";
}}]]>
</xp:this.value>
</xp:text>
</xp:panel>
</xp:repeat>
</xp:view>
视图数据的过滤是在数据源级别完成的。而且,在循环浏览Notes视图时,一定要循环使用!而且,一定要循环使用Notes视图!我完全同意洛萨的观点。dominoView with
keys
属性集的作用与您所做的差不多,但是使用ViewNavigator并限制在运行时从中收集数据的条目数,以获得更好的性能,另外还可以循环使用视图条目和视图条目值(可能包括日期/时间,在回收ViewEntry时不会自动回收)。仅在绝对需要时手动迭代ViewEntries。getColumnValues()
必须提取所有列值,因此,即使您只需要一列,实际上也必须获取所有列值,因此不需要在那里保存。完全同意这种方法。非常感谢!我完全同意Lothar。带有键的dominoView
属性集与您所做的差不多,但使用ViewNavigator和为了获得更好的性能,在运行时收集了大量的条目数据,并回收了视图条目和视图条目值(可能包括日期/时间,回收视图条目时不会自动回收)。仅在绝对需要时手动迭代视图条目。getColumnValues()
必须提取所有列值,因此,即使您只需要一列,实际上也必须获取所有列值,因此不需要在那里保存。完全同意这种方法。非常感谢!