実際、Faceletsで「古き良き」JSTLをJSPのように使用することはできなくなりました。Faceletsは、JSTLの限られたサブセットのみをサポートします(すでに組み込まれているため、JSTL JARファイルは実際には不要です)。
この目的のために、カスタムタグ以上のカスタムEL関数を作成する必要があります。
これを実行できるようにしたいとします。
<ice:graphicImage ... title="#{fmt:formatDate(bean.date, 'yyyy-MM-dd')}" />
このように大まかに言うと、JSTL<fmt:formatDate>
タグでできることと同じですが、EL関数のフレーバーであるため、「中間」タグを必要とせずにどこでも使用できます。Date
aとSimpleDateFormat
パターンの2つの引数を取る必要があります。指定されたパターンに基づいてフォーマットされた日付を返すようにします。
まず、まさにそれを行うメソッドを使用して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>
次に、既存の新しい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>
(注:すでに定義されているfacelets.LIBRARIES
場合は、分離された新しいパスを追加するだけです)
次に、FaceletsXHTMLファイルで新しい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')}" />
お役に立てれば。