我需要将一个Date转换为一个页面中的String(我不想将toStrings的负载添加到我的域模型中,因此不能添加到bean中).
<ice:graphicImage value="bean.image" title="#{bean.date}"/>
Run Code Online (Sandbox Code Playgroud)
上面的代码工作,但以默认格式格式化日期...我想更改格式.
我已经尝试过使用JSTL fmt,但这似乎与Facelets JSF转换为title属性的日期兼容.有没有解决方法(不必使用JSTL)?
谢谢.
实际上,你不能像在JSP中那样在Facelets中使用"老旧的"JSTL.Facelets仅支持JSTL 的有限子集(并且已经内置,JSTL JAR文件实际上是多余的).
为此,您不得不编写自定义标记或更好的自定义EL函数.
让我们假设我们希望能够做到这一点:
<ice:graphicImage ... title="#{fmt:formatDate(bean.date, 'yyyy-MM-dd')}" />
Run Code Online (Sandbox Code Playgroud)
粗略地说JSTL <fmt:formatDate>标签可以做的相同,但后来就是EL功能的味道,这样你就可以在任何地方使用它,而不需要"中间"标签.我们希望它采用2个参数,a 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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后将其定义为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>
Run Code Online (Sandbox Code Playgroud)
然后使用现有的新taglib熟悉Facelets /WEB-INF/web.xml:
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/META-INF/formatter.taglib.xml</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
(注意:如果你已经有了facelets.LIBRARIESdefinied,那么你可以添加新的路径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"
...
>
Run Code Online (Sandbox Code Playgroud)
最后,您可以按预期使用它:
<ice:graphicImage ... title="#{fmt:formatDate(bean.date, 'yyyy-MM-dd')}" />
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
5542 次 |
| 最近记录: |