JSF。转换 h:commandLink 显示的值

Posted

技术标签:

【中文标题】JSF。转换 h:commandLink 显示的值【英文标题】:JSF. Convert value for h:commandLink display 【发布时间】: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 的值吗?

【问题讨论】:

【参考方案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" />

【讨论】:

以上是关于JSF。转换 h:commandLink 显示的值的主要内容,如果未能解决你的问题,请参考以下文章

h:commandLink 不工作

JSF ajax 验证不验证需要 true 的项目

<h:commandLink> 不适用于嵌套 <f:view> 标记,但 <h:outputLink> 正在工作

注销后的 JSF 生活

需要将 jQuery 验证插件与 jsf 集成

如何在 JSF 2.0 中重定向