2013-07-02 55 views
0

我想創建一個自定義控件,其中顯示3列, 列1,從複選框中選擇的值(這是好的) 第2列,可編輯框,這是顯示,但不工作100% 第3列,刪除行的按鈕(還有待完成)XPages - 重複控制 - 獲取項目值

到目前爲止: 選擇選項後,單擊「創建行」按鈕,每行選中一行。

問題: 只能使用可編輯框中的最後一個值,我如何從每個框中獲取值? getComponent(「inputText1」)。getValue()只顯示最後一個值。

實施例的代碼是在此URL:

http://snipt.org/AAgd3

回答

3

綁定列值數組變量。練習23有一個完整的工作示例:http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Tutorial-Introduction-to-XPages-Exercise-23

您只需將其調整爲數據的源/目標。讓我們知道它是怎麼回事

+0

謝謝,我下載了示例並按照步驟操作,得到Error 500 HTTP Web服務器:命令未處理異常。在你的開發數據庫中的 –

+1

步驟1後面會看到這個問題:打開標準錯誤頁面,所以它清楚地說明了什麼是錯誤的。順便說一句。代碼來自練習,你必須做的事情(它是23號,所以可能取決於前面的步驟),而不是你複製和粘貼的東西。 – stwissel

0

如果你想動態地綁定它們,你也可以用表達式語言來做到這一點。爲了使字段可編輯,需要一些時間來解決,但我解決它的方式是將計算的ID傳遞到自定義控件中,然後將其用於綁定。

例如:如果我使用唯一零件名稱列表,我可以將自定義控件傳遞給一個評論變量。如果我將它作爲fieldNameComment傳遞給我的自定義控件,則可以通過以下代碼動態地將其綁定到inputText元素。

我正在使用作爲dataSource傳入的DominoDocument。

調用自定義控制:

<xp:repeat var="CurrVal" value="#{DataSource}"> 
    <xc:DynamicTableRow dataSource="#{EmissionsDocument}"> 
     <xc:this.fieldNameComment><![CDATA[#{javascript:CurrVal+"Comment"}]]></xc:this.fieldNameComment> 
    </xc:DynamicTableRow> 
</xp:repeat> 

自定義控件內部:

<xp:inputText id="inputText5" 
    value="#{compositeData.dataSource[compositeData.fieldNameComment]}"> 
</xp:inputText> 

只要(因爲某些原因)沒有串計算的表達式語言語法中進行的,這將產生一個可編輯的領域。在我的測試中,如果我試圖通過連接任何字符串來計算一個值,該字段將被綁定,但在任何情況下都不會顯示爲可編輯。如果你想直接綁定到字段,這可能是一個好方法,但是如果你想保存你的數組並通過java解析它,那麼Stephan的解決方案也很好用。希望這有幫助!

附加:增加重複控制以顯示通過數據源的迭代。數據源的每次迭代都會得到一個值CurrVal,字符串「Comment」被附加到該值。這創建了一系列基於DataSource中的值綁定到定製控件中的輸入的一系列FieldNames,稱爲DynamicTableRow

+0

謝謝,我試着將Collection Name改爲CurrRow,但值保存後消失了,所以我不能使用CurrRow.getColumnValue(「key2」)? –

+0

對不起,CurrRow.getColumnValue(「key2」)指向我使用視圖遍歷預先計算的值。這可以是任何你想要綁定數據的字符串。我還應該補充說,我的代碼只在將數據傳遞給自定義控件時才起作用,而您自己的代碼似乎並不適用。我會編輯我的代碼,使其更清晰一些。 –

+0

嗯。聽起來你根本沒有自定義控件,但是你正在將值傳遞給重複控件。我從來沒有任何運氣在重複控制之外動態地關聯值綁定。我建議嘗試在重複控制內創建自定義控件並傳遞計算值。 –