4

日付入力に次のJSFコンバーターを使用しています。

<f:convertDateTime dateStyle="medium" timeZone="EST" type="date" />

コンバーターを一元化して、タイムゾーンまたは日付スタイルを1か所で変更できるようにします。そんなことがあるものか?

オーバーライドできます<f:convertDateTime>か?

4

1 に答える 1

10

唯一の方法は、システムのデフォルトのタイムゾーンに依存することです(JSFによって内部的に使用されるUTCではありません)。したがって、本番ランタイム環境を100%制御でき、本番システムプラットフォームのタイムゾーンがESTの場合は、次のコンテキストパラメーターを次のように追加するだけweb.xmlです。

<context-param>
    <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
    <param-value>true</param-value>
</context-param>

このように、JSFはTimeZone#getDefault()、UTCではなくコンバーターのデフォルトのタイムゾーンとして取得されたシステムプラットフォームのタイムゾーンを使用します。

それを制御できない場合、最善の策は、そのプロパティを保持するアプリケーションスコープのBeanを作成し、代わりにそれを参照することです。

<f:convertDateTime ... timeZone="#{app.timeZone}" />

次のようにクラスビハインドを拡張して、すべてのプロパティがすでに設定されているコンバーターを取得できますが、カスタムタグ(およびいくつかのXMLボイラープレートが必要)でラップせずに、ビュー側から追加の属性を宣言することはできません。)::DateTimeConverter<f:convertDateTime>TagHandler

@FacesConverter("defaultDateConverter")
public class DefaultDateConverter extends DateTimeConverter {

    public DefaultDateConverter() {
        setDateStyle("medium");
        setType("date");
        setTimeZone(TimeZone.getTimeZone("EST"));
    }

}

として使用<f:converter converterId="defaultDateConverter" />

于 2012-12-21T15:47:05.537 に答える