Play Framework 2.0: Пользовательские средства форматирования

Я пытаюсь написать собственный модуль форматирования (для полей DateTime, а не для полей java.util.Date), но мне трудно получить это работать. Я создал свою аннотацию, а также расширил класс AnnotationFormatter. Я вызываю play.data.format.Formatters.register(DateTime.class, new MyDateTimeAnnotationFormatter()) при загрузке приложения, но методы синтаксического анализа и печати никогда не срабатывают.

Как мне это сделать?

Редактировать: рассматриваемый код может быть полезен ;)

Класс аннотаций (в значительной степени вдохновленный классом аннотаций, включенным в 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);

    }

Чтобы зарегистрировать модуль форматирования в framework, я делаю этот вызов в статическом инициализаторе класса 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();

Здесь я в растерянности.

6
задан df' 1 July 2012 в 08:20
поделиться