我将Status
对象传递给h:commandLink值。所以它显示在页面上。问题是,显示的字符串是
packages.entity.Status@db2674c8
。
我为带有注释的Status
创建了转换器
@FacesConverter(forClass = Status.class, value = "statusConverter")
但它不起作用。我试着明确地设置它:
<h:commandLink value="#{result.status}" action="/view">
<f:converter converterId="statusConverter" />
</h:commandLink>
然后我收到了一个错误:/search-form.xhtml @57,58 <f:converter> Parent not an instance of ValueHolder: javax.faces.component.html.HtmlCommandLink@53e387f3
这是真的,h:commandLink
不是ValueHolder
。有没有办法转换h:commandLink
的价值?
答案 0 :(得分:11)
有趣的是,我直觉地希望它可以在这里工作,但UICommand
确实没有扩展UIOutput
(而UIInput
确实如此)。这可能值得JSF男孩的增强请求。
您可以使用<h:outputText>
显示此问题来解决此问题。
<h:commandLink action="/view">
<h:outputText value="#{result.status}">
<f:converter converterId="statusConverter" />
</h:outputText>
</h:commandLink>
或者只是没有明确<f:converter>
,因为您已经有forClass=Status.class
<h:commandLink action="/view">
<h:outputText value="#{result.status}" />
</h:commandLink>
答案 1 :(得分:0)
转换器无法附加到命令组件(h:commandLink,h:commandButton)
您可以在辅助bean中创建复合组件或使用方法。
答案 2 :(得分:0)
正如您所指出的那样,h:commandLink不是ValueHolder,因此它不支持转换器。 value属性实际上决定了显示的文本。
转换器用于将作为Object的值转换为String以在html中表示,然后在另一侧将该String转换回对象的实例。
在你的例子中,我猜测result.status是一个你想转换成字符串的对象?如果是这样,您可能只需要引用对象的实际String属性,例如:
<h:commandLink value="#{result.status.statusMessage}" action="/view" />