gpt4 book ai didi

jsf - Facelets 和 JSTL(将日期转换为字符串以在字段中使用)

转载 作者:行者123 更新时间:2023-12-04 18:38:03 24 4
gpt4 key购买 nike

我需要在页面内将日期转换为字符串(我不想将大量的 toStrings 添加到我的域模型中,因此添加到 bean 不是一个选项)。

<ice:graphicImage value="bean.image" title="#{bean.date}"/>

上面的代码有效,但以默认格式格式化日期......我想更改格式。

我曾尝试使用 JSTL fmt,但这似乎与 Facelets 不兼容 JSF Convert dates for title attribute .是否有解决方法(不必使用 JSTL)?

谢谢。

最佳答案

确实,您不能再像在 JSP 中那样在 Facelets 中使用“旧的”JSTL。 Facelets 仅支持 limited JSTL 的子集(并且已经内置,JSTL JAR 文件实际上是多余的)。

为此,您不得不编写自定义标记或更好的自定义 EL 函数。

让我们假设我们希望能够做到这一点:

<ice:graphicImage ... title="#{fmt:formatDate(bean.date, 'yyyy-MM-dd')}" />

JSTL <fmt:formatDate> 大致如此说一样什么tag 可以做,但是具有 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 中的新标签库熟悉 Facelets :
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/META-INF/formatter.taglib.xml</param-value>
</context-param>

(注意:如果您已经定义了 facelets.LIBRARIES,那么您只需添加逗号分隔的新路径即可)

然后在 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')}" />

希望这可以帮助。

关于jsf - Facelets 和 JSTL(将日期转换为字符串以在字段中使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2378826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com