Próbuję napisać niestandardowy formater (dla pól DateTime, w przeciwieństwie do pól java.util.Date), ale mam trudności z uruchomieniem tego. Utworzyłem adnotację, a także rozszerzyłem klasę AnnotationFormatter. Używam play.data.format.Formatters.register (DateTime.class, new MyDateTimeAnnotationFormatter()) podczas ładowania aplikacji, ale metody analizy i drukowania nigdy nie są wyzwalane.Play Framework 2.0: Niestandardowe formatery
Jak mam to zrobić?
Edit: kod w pytaniu może być pomocne;)
Klasa adnotacji (mocno inspirowane przez klasę adnotacji dołączone Gra Framework):
@Target({ FIELD })
@Retention(RUNTIME)
@play.data.Form.Display(name = "format.datetime", attributes = { "pattern" })
public static @interface JodaDateTime {
String pattern();
}
Klasa zwyczaj formater:
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);
}
Aby zarejestrować formater z frameworkiem, wywołuję to w statycznym initalizerze na klasie Application (może być tam lepiej miejsce do umieszczenia Ten, nie krępuj mi powiedzieć gdzie):
play.data.format.Formatters.register(DateTime.class, new AnnotationDateTimeFormatter());
Mam potwierdzone przez single-stepping przez debugger, że ta rozmowa zostanie wykonana i że żadne błędy są wyrzucane, ale nadal formater nie jest prowadzony na przekór z adnotacją pól DateTime odpowiednio:
@Formats.JodaDateTime(pattern = "dd.MM.yyyy HH:mm:ss")
public DateTime timeOfRequest = new DateTime();
Jestem w tej sytuacji.
Może mógłbyś napisać swój kod? – Somatik
Mogłem rzeczywiście. :) Zmieniłem mój pierwotny post, aby uwzględnić dany kod. –
Rozwiązałeś to? – Denis