在JSF中为“转换日期”;标题「;表中的属性
在JSF中是否可以转换日期值并将其放入“title”属性中?在一个类似的问题中,有一个答案是,可以使用JSTL的在JSF中为“转换日期”;标题「;表中的属性,jsf,date,converter,Jsf,Date,Converter,在JSF中是否可以转换日期值并将其放入“title”属性中?在一个类似的问题中,有一个答案是,可以使用JSTL的fmt:formatDate,但不能使用重复的组件,例如UIData。我需要在一个表(扩展的HtmlDataTable)中执行此操作 例如,以下代码将日期正确显示为文本值,但不显示在“标题”属性中: <h:outputText class="yui-tip" title="#{task[col.attributeName]}" value="#{task[col.attribut
fmt:formatDate
,但不能使用重复的组件,例如UIData
。我需要在一个表(扩展的HtmlDataTable)中执行此操作
例如,以下代码将日期正确显示为文本值,但不显示在“标题”属性中:
<h:outputText class="yui-tip" title="#{task[col.attributeName]}" value="#{task[col.attributeName]}">
<f:convertDateTime type="both" dateStyle="medium" timeStyle="short" timeZone="#{userProfileBean.clientTimeZone}" />
</h:outputText>
该
仅转换值
属性,而不转换其他属性。在这种特殊情况下,最好的办法是为此创建一个自定义EL函数
首先创建一个带有公共静态
方法的final
类,该方法接受必要的参数并委托给JSFDateTimeConverter
(包/类/方法名称由您自由选择):
在/META-INF/functions.taglib.xml
中将其定义为facelet taglib
(文件名可自由选择):
(注意:如果已经定义了facelets.LIBRARIES
,则只需添加新路径commaseparated;对于facelets 2.x,则需要javax.faces.facelets\u LIBRARIES
上下文参数)
在Facelets XHTML文件中将其声明为新的XML命名空间:
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:uf="http://example.com/util/functions"
...
>
最后,您可以按预期使用它:
<h:outputText
value="foo"
title="#{uf:convertDateTime(bean.date, 'both', 'medium', 'short', bean.timeZone)}" />
如有必要,可以对函数中的类型和样式进行硬编码,并为该方法指定一个不同的名称,以指示这些默认值
如果您碰巧使用了JSF实用程序库,那么您也可以使用它的函数。您使用的是JSF 1.x还是2.x?您使用的是JSP还是Facelets?我使用的是JSF1.2(或1.1)和Facelets。谢谢。我贴出了答案。对于JSP而不是Facelets,您需要
/WEB-INF
中的.tld
文件,而不是.taglib.xml
。对于JSF 2.x而不是JSF 1.x,您需要以稍微不同的方式重新声明.taglib.xml
的根元素(没有doctype)。
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/META-INF/functions.taglib.xml</param-value>
</context-param>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:uf="http://example.com/util/functions"
...
>
<h:outputText
value="foo"
title="#{uf:convertDateTime(bean.date, 'both', 'medium', 'short', bean.timeZone)}" />