JSF。转换h:commandLink显示的值

时间:2011-05-23 14:03:31

标签: jsf jsf-2

我将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的价值?

3 个答案:

答案 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" />