2016-07-25 101 views
0

我試圖通過獲取NotesViewEntryCollection,然後循環這個集合來構建一個數組,其中的每個值在一個重複控制中顯示一個視圖的子集數組包含與條目中列值對應的數組。 <xp:text escape="true" id="computedField1" value="#{javascript:rowData[rowIndex][0]}"></xp:text>重複控制綁定到重複集合中返回字符串的數組

的錯誤是::

未知的成員 '0' 在Java類 'java.lang.String中'

<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> 

但我在這條線得到一個錯誤

有關如何解決此問題的任何想法?

回答

2

我覺得這可以 - 不應該! - 簡化。基本思路是,您可以將Domino視圖數據源或整個對象作爲填充到repeat對象中。這樣你最終會得到代表單個NotesViewEntry對象的rowData。您的computedField值可以直接引用條目的columnValues Vector中的任何元素。這樣,您甚至不需要費心去回收任何對象:

<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> 

過濾視圖數據是在數據源級完成的。

+1

我完全同意Lothar。具有'keys'屬性集的dominoView幾乎可以做你正在做的事情,但是使用ViewNavigator並限制條目數量是爲了獲得更好的性能而從運行時收集的,以及回收視圖條目和視圖條目值(可以包括日期/時間,在回收ViewEntry時不會自動回收)。只有在絕對需要時手動迭代ViewEntries。 'getColumnValues()'必須提取所有列值,所以即使只需要一列,實際上也必須全部得到它們,所以不要在那裏保存。 –

+0

完全同意這種方法。非常感謝你! – jpishko

0

在您的push方法中,您不傳入數組索引。

columnVals.push(entry.getColumnValues()[0]); 

應該

columnVals.push(entry.getColumnValues()); 

霍華德

+0

而且,請務必在您循環瀏覽Notes視圖時回收利用! – Howard