Я пытаюсь написать собственный форматированный (для полей DateTime, в отличие от полей java.util.Date), но мне трудно заставить это работать. Я создал свою аннотацию, а также расширил класс AnnotationFormatter. Я вызываю play.data.format.Formatters.register (DateTime.class, новый MyDateTimeAnnotationFormatter()) при загрузке приложения, но методы разбора и печати никогда не запускаются.Play Framework 2.0: Пользовательские форматировщики
Как я должен это делать?
Edit: код в вопросе может быть полезным;)
Класс аннотаций (сильно вдохновлен классом аннотаций включен 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();
Я здесь в убытке.
Возможно, вы сможете оставить свой код? – Somatik
Я действительно мог. :) Я редактировал свое оригинальное сообщение, чтобы включить этот код. –
Вы решили это? – Denis