2011-11-22 28 views

回答

1

這應該已經是默認行爲。假設toString()方法在CustomClass上正確實施,則不需要更改給定代碼示例上的任何內容。但是,如果它返回的HTML,你需要添加escape="false"輸出文本,以避免JSF從自動轉義它(這確實爲了防止用戶控制輸入XSS攻擊):

<h:outputText value="#{contact.customTypeProperty}" escape="false" /> 

但這不一定是最佳做法。您應該在視圖方面控制演示文稿,而不是在模型端的toString()中。例如,假設CustomClass反過來有兩個屬性foobar和你想目前它在一個表:

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

+0

感謝BalusC,以某種方式調用Object的toString。雖然它在CustomClass中被正確覆蓋。 – anergy

+0

在'toString()'方法上放置'@ Override'註釋以確保您沒有在方法簽名中進行任何改變。它必須是'public String toString(){}'沒有參數和引發。 – BalusC

+0

覆蓋表示法在那裏,我猜這個問題與JSF無關。 wsimport不會生成toString。所以問題出現在那裏。 – anergy