日付入力に次のJSFコンバーターを使用しています。
<f:convertDateTime dateStyle="medium" timeZone="EST" type="date" />
コンバーターを一元化して、タイムゾーンまたは日付スタイルを1か所で変更できるようにします。そんなことがあるものか?
オーバーライドできます<f:convertDateTime>
か?
唯一の方法は、システムのデフォルトのタイムゾーンに依存することです(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" />