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