2013-03-18 19 views
0

我想要做的是創建一個自定義控件,以確定它是否應該加載或不加載。所以我查看了自定義控件的加載屬性,但它不能像我期望的那樣工作。它至少似乎忽略了這個屬性。我放了一個小測試控件來演示。自定義控件加載屬性是否正常工作?

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" pageTitle="Test" loaded="false"> 
    This is a test custom control. 
</xp:view> 

即使加載的屬性設置爲false,控件始終顯示。 Nw我可以做的是將自定義控件放置在我的頁面上並在那裏設置加載的屬性。這工作正常,但我想避免每次使用該控件時都必須設置該屬性。我想把代碼放在控件中,看它是否應該加載。

我錯過了什麼?

是的我知道我可以把所有東西放在控件上的一個div中,而不是加載div,但是如果它不應該被加載,我只是不加載控件。

回答

1

我不完全確定爲什麼加載的屬性在根元素上是可用的,因爲它所做的事情本質上不可能在該級別進行評估。

與渲染相反,渲染確定組件的任何表示是否將發送給使用者,負載決定組件是否被創建。所以如果渲染是錯誤的,它只是不顯示...如果加載是假的,它甚至不存在。爲了評估視圖標籤屬性,該組件需要存在,所以現在阻止它存在已經太晚了,因爲它需要存在以便被告知不存在。

因此,爲了使用加載來抑制整個控件,需要在控件引用上設置屬性。換句話說,將控件添加到XPage(或另一個自定義控件)時,請在控件的標記上設置加載的表達式。如果它評估爲false,那麼控件將永遠不會被加載。

請記住,所有這些最終都會以Java的形式執行......如果您阻止了類實例的構造,那麼您沒有類實例來詢問它是否應該被構造。相反,如果你創建一個類實例,然後問它是否應該存在......太遲了,它已經存在。如果自定義控件應該擁有其內容是否存在的邏輯,那麼在單個子容器的加載屬性中指定該邏輯就是「正確」的方法。