2014-09-02 38 views
1

我有一個簡單的文檔,有3個字段和1個富文本字段。我也有一個xpage 3個簡單的編輯框控件和1個富文本。我的NotesXSPDocument的名稱是document1。我可以在xpages中獲得xsp文檔的所有組件嗎?

問題1: 我能得到與XSP文檔的所有控件的載體?例如,而不是使用getComponent("fld1")getComponent("fld2") ...等,我可以使用類似getAllComponents()document1.getControls()?這些方法當然不存在,所以我問是否有辦法做到這一點。我知道我可以通過調用document1.getDocument().getItems()來獲得文檔的所有項目(不是XSP)。有沒有類似的XSP?

問題2: 比方說像我上述我們可以得到一個載體。然後,如果我遍歷這個向量來獲得每個控件的值,是否有一種方法來檢查它是富文本還是簡單的文本字段?

+0

我只是想知道爲什麼你想獲得Xpage上的所有組件?對此需要什麼?我可以看到文檔上很少需要getItems,但我不明白爲什麼你需要Xpage上的所有組件。 – 2014-09-02 12:28:44

+0

我已經創建了一個類似gmail的「自動保存爲草稿」的模塊。所以當我打開要編輯的文檔時,我會定期檢查字段中是否有任何更改。我通過逐個獲取字段來實現它,但是我想使它更加抽象和可重用。 – 2014-09-02 12:32:00

+0

您可能會更好地檢查客戶端的字段差異,然後觸發您的服務器端保存,特別是因爲您要「定期」輪詢更改。 – 2014-09-02 12:34:35

回答

3

有點複雜,但是。 facesContext.getViewRoot()是一個UIViewRoot對象,因此它有List<UIComponent> getChildren()方法返回它的子項。

然而,因爲它是一個樹狀結構,它的一些孩子將有其他子組件。您必須遍歷整個樹來構建您想要查看的組件列表。

對於類型,您可以根據類來決定組件的類型。例如,UIInput是一個文本框等

4

從技術上說,是的,但不容易,這是哪兒有可能是更好的方式來處理任何潛在的問題是要解決這些情況之一。

不過,如果你希望得到的頁面上輸入列表,XspQuery是你的朋友:http://avatar.red-pill.mobi/tim/blog.nsf/d6plinks/TTRY-96R5ZT。有了這個,你可以使用「locateInputs」來獲取頁面上所有輸入的列表,然後檢查它們的值方法綁定,看看字符串版本是否引用了你的變量名。容易出錯並且不太漂亮,但它可以工作。由於他們是屬性綁定,我不認爲那裏的startsWith過濾器會做你想要的。

或者,您可以將組件綁定到從一開始就在Java類的東西。我最近一直在做這樣的事情(爲了不同的結局),最初在這裏描述它:https://frostillic.us/f.nsf/posts/my-black-magic-for-the-day。結果是,如果你對binding =「」屬性做了正確的巧妙處理,你可以得到引用給定對象屬性的所有組件的列表。

至於問題的第二部分,如果您以某種方式獲取組件的句柄,則可以通過執行「component instanceof com.ibm.xsp.UIInputRichText」來檢查它是否爲富文本控件」。

相關問題