4

ページ内で日付を文字列に変換する必要があります(ドメインモデルに大量のtoStringを追加したくないので、Beanに追加することはできません)。

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

上記のコードは機能しますが、日付をデフォルトの形式でフォーマットします...フォーマットを変更したいと思います。

JSTL fmtを使用してみましたが、これはFacelets JSF Convert datefortitle属性と互換性がないようです。これに対する回避策はありますか(JSTLを使用する必要はありません)?

ありがとう。

4

2 に答える 2

6

実際、Faceletsで「古き良き」JSTLをJSPのように使用することはできなくなりました。Faceletsは、JSTLの限られたサブセットのみをサポートします(すでに組み込まれているため、JSTL JARファイルは実際には不要です)。

この目的のために、カスタムタグ以上のカスタムEL関数を作成する必要があります。

これを実行できるようにしたいとします。

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

このように大まかに言うと、JSTL<fmt:formatDate>タグでできることと同じですが、EL関数のフレーバーであるため、「中間」タグを必要とせずにどこでも使用できます。Dateaと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')}" />

お役に立てれば。

于 2010-03-04T17:39:00.920 に答える
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')}"/>
于 2015-06-23T14:10:02.063 に答える