【问题标题】:JSF. Convert value for h:commandLink displayJSF。转换 h:commandLink 显示的值
【发布时间】:2011-08-31 04:40:31
【问题描述】:

我将 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 &lt;f:converter&gt; Parent not an instance of ValueHolder: javax.faces.component.html.HtmlCommandLink@53e387f3

这是真的,h:commandLink 不是ValueHolder。有什么方法可以转换 h:commandLink 的值吗?

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

    有趣的是,我凭直觉希望它可以在这里工作,但UICommand 确实没有扩展UIOutput(而UIInput 可以)。也许值得向 JSF 男孩提出增强请求。

    您可以通过使用&lt;h:outputText&gt; 显示它来解决此问题。

    <h:commandLink action="/view">
        <h:outputText value="#{result.status}">
            <f:converter converterId="statusConverter" />
        </h:outputText>
    </h:commandLink>
    

    或者只是没有明确的&lt;f:converter&gt;,因为你已经有一个forClass=Status.class

    <h:commandLink action="/view">
        <h:outputText value="#{result.status}" />
    </h:commandLink>
    

    【讨论】:

    • 你更快 ;-) 无论如何,我错过了包装 h:outputText 的意义。这应该可以解决问题。
    • 又是 BalusC 的无价之宝。与 h:link 一起使用,将格式化的日期显示为值。
    【解决方案2】:

    转换器不能附加到命令组件(h:commandLink、h:commandButton)

    您可以为此创建一个复合组件或在您的支持 bean 中使用一个方法。

    【讨论】:

      【解决方案3】:

      正如您指出的那样, h:commandLink 不是 ValueHolder,因此它不支持转换器。 value 属性实际上决定了显示的文本。

      转换器用于将作为对象的值转换为用于在 html 中表示的字符串,然后在另一方面将该字符串转换回对象的实例。

      在您的示例中,我猜 result.status 是您想要转换为字符串的对象?如果是这样,您可能只需要引用对象的实际 String 属性,例如:

      <h:commandLink value="#{result.status.statusMessage}" action="/view" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多