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 <f:converter> Parent not an instance of ValueHolder: javax.faces.component.html.HtmlCommandLink@53e387f3
这是真的,h:commandLink
不是ValueHolder
。有什么方法可以转换 h:commandLink
的值吗?
【问题讨论】:
【参考方案1】:有趣的是,我凭直觉希望它可以在这里工作,但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>
【讨论】:
你更快 ;-) 无论如何,我错过了包装 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 显示的值的主要内容,如果未能解决你的问题,请参考以下文章