0
如何使用facelet表達式語言顯示自定義屬性?Facelets中的自定義數據類型JSF 2表達式語言
例如:
<h:outputText value="#{contact.customTypeProperty}" />
其中customTypeProperty是類型CustomClass,我想顯示()由它的toString返回的字符串?
如何使用facelet表達式語言顯示自定義屬性?Facelets中的自定義數據類型JSF 2表達式語言
例如:
<h:outputText value="#{contact.customTypeProperty}" />
其中customTypeProperty是類型CustomClass,我想顯示()由它的toString返回的字符串?
這應該已經是默認行爲。假設toString()
方法在CustomClass
上正確實施,則不需要更改給定代碼示例上的任何內容。但是,如果它返回的HTML,你需要添加escape="false"
輸出文本,以避免JSF從自動轉義它(這確實爲了防止用戶控制輸入XSS攻擊):
<h:outputText value="#{contact.customTypeProperty}" escape="false" />
但這不一定是最佳做法。您應該在視圖方面控制演示文稿,而不是在模型端的toString()
中。例如,假設CustomClass
反過來有兩個屬性foo
和bar
和你想目前它在一個表:
<h:panelGrid columns="2">
<h:outputText value="Foo" />
<h:outputText value="#{contact.customTypeProperty.foo}" />
<h:outputText value="Bar" />
<h:outputText value="#{contact.customTypeProperty.bar}" />
</h:panelGrid>
如果你這樣做是爲了避免重複的代碼,那麼你實際上應使用包括文件或標籤文件。另請參閱When to use <ui:include>, tag files, composite components and/or custom components?
感謝BalusC,以某種方式調用Object的toString。雖然它在CustomClass中被正確覆蓋。 – anergy
在'toString()'方法上放置'@ Override'註釋以確保您沒有在方法簽名中進行任何改變。它必須是'public String toString(){}'沒有參數和引發。 – BalusC
覆蓋表示法在那裏,我猜這個問題與JSF無關。 wsimport不會生成toString。所以問題出現在那裏。 – anergy