我需要将一个Date转换为一个页面内的字符串(我不想将toStrings的负载添加到我的域模型中,因此添加到bean不是一个选项。)
<ice:graphicImage value="bean.image" title="#{bean.date}"/>
以上代码有效,但以默认格式格式化日期...我想更改格式。
我尝试过使用JSTL fmt,但这似乎与Facelets JSF Convert dates for title attribute不兼容。是否有解决方法(不必使用JSTL)?
感谢。
答案 0 :(得分:6)
实际上,你不能像在JSP中那样在Facelets中使用“老旧的”JSTL。 Facelets仅支持JSTL的limited子集(并且已经内置,JSTL JAR文件实际上是多余的)。
为此,您不得不编写自定义标签或更好的自定义EL功能。
我们假设我们希望能够做到这一点:
<ice:graphicImage ... title="#{fmt:formatDate(bean.date, 'yyyy-MM-dd')}" />
粗略地说JSTL <fmt:formatDate>
标签可以做什么,但后来就是EL功能的味道,这样你就可以在任何地方使用它而不需要“中间”标签。我们希望它采用2个参数,Date
和SimpleDateFormat
模式。我们希望它根据给定的模式返回格式化的日期。
首先使用final
方法创建一个public static
类,该方法完全符合以下条件:
package com.example.el;
import java.text.SimpleDateFormat;
import java.util.Date;
public final class Formatter {
private Formatter() {
// Hide constructor.
}
public static String formatDate(Date date, String pattern) {
return new SimpleDateFormat(pattern).format(date);
}
}
然后在facelet-taglib
中将其定义为/META-INF/formatter.taglib.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib>
<namespace>http://example.com/el/formatter</namespace>
<function>
<function-name>formatDate</function-name>
<function-class>com.example.el.Formatter</function-class>
<function-signature>String formatDate(java.util.Date, java.lang.String)</function-signature>
</function>
</facelet-taglib>
然后在现有的/WEB-INF/web.xml
:
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/META-INF/formatter.taglib.xml</param-value>
</context-param>
(注意:如果你已经确定facelets.LIBRARIES
,那么你可以添加新的路径commaseparated)
然后在Facelets XHTML文件中将其定义为新的XML命名空间:
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:fmt="http://example.com/el/formatter"
...
>
最后,您可以按预期使用它:
<ice:graphicImage ... title="#{fmt:formatDate(bean.date, 'yyyy-MM-dd')}" />
希望这有帮助。
答案 1 :(得分:1)
您可以在bean中使用转换器方法,如:
public class Bean{
...
public String formatDate(Date fecha, String pattern) {
return (new SimpleDateFormat(pattern)).format(fecha);
}
...
}
并且,在您的页面中:
<ice:graphicImage value="bean.image" title="#{bean.formatDate(bean.date,'yyyy-MM-dd')}"/>