6

カスタム フォーマッタ (Java.util.Date フィールドではなく、DateTime フィールド用) を作成しようとしていますが、これを機能させるのに苦労しています。注釈を作成し、AnnotationFormatter クラスを拡張しました。アプリケーションの読み込み時に play.data.format.Formatters.register(DateTime.class, new MyDateTimeAnnotationFormatter()) を呼び出しますが、parse メソッドと print メソッドはトリガーされません。

どうすればいいですか?

編集:問題のコードが役立つかもしれません;)

注釈クラス (Play Framework に含まれる注釈クラスに大きく影響を受けています):

@Target({ FIELD })
@Retention(RUNTIME)
@play.data.Form.Display(name = "format.datetime", attributes = { "pattern" })
public static @interface JodaDateTime {
    String pattern();
}

カスタム フォーマッタ クラス:

public static class AnnotationDateTimeFormatter extends AnnotationFormatter<JodaDateTime, DateTime> {

    @Override
    public DateTime parse(JodaDateTime annotation, String text, Locale locale) throws ParseException {
        if (text == null || text.trim().isEmpty()) {
            return null;
        }

        return DateTimeFormat.forPattern(annotation.pattern()).withLocale(locale).parseDateTime(text);
    }

    @Override
    public String print(JodaDateTime annotation, DateTime value, Locale locale) {
        if (value == null) {
            return null;
        }

        return value.toString(annotation.pattern(), locale);

    }

フォーマッタをフレームワークに登録するには、Application クラスの静的イニタライザで次の呼び出しを行います (これを配置するより適切な場所があるかもしれません。場所を教えてください)。

play.data.format.Formatters.register(DateTime.class, new AnnotationDateTimeFormatter());

デバッガーをシングルステップ実行して、この呼び出しが行われ、エラーがスローされないことを確認しましたが、次のように DateTime フィールドに適切に注釈を付けても、フォーマッターは実行されません。

@Formats.JodaDateTime(pattern = "dd.MM.yyyy HH:mm:ss")
public DateTime timeOfRequest = new DateTime();

私はここで途方に暮れています。

4

2 に答える 2

0

のフォーマッタでも同様の問題がありましたDateTimehere でGlobal.onStart説明されているように、フォーマッタを登録していました。クラスを作成しただけではリロードがトリガーされなかったようです。リロードをトリガーした別のファイルを変更すると(コンソール出力に表示されます)、機能し始めました。アプリを停止して再起動しても、同じ効果が得られるはずです。Global--- (RELOAD) ---

于 2012-07-02T16:11:17.517 に答える
0

DateTime の代わりに JodaDateTime に登録する必要があります。

play.data.format.Formatters.register(JodaDateTime.class, new AnnotationDateTimeFormatter());
于 2012-06-25T15:29:36.507 に答える