2011-11-22 47 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