Estoy tratando de escribir un formateador personalizado (para los campos DateTime, a diferencia de los campos java.util.Date), pero estoy teniendo dificultades para hacer que esto funcione. Creé mi anotación y extendí la clase AnnotationFormatter. Llamo a play.data.format.Formatters.register (DateTime.class, new MyDateTimeAnnotationFormatter()) en la carga de la aplicación, pero los métodos de análisis e impresión nunca se desencadenan.Play Framework 2.0: Formateadores personalizados
¿Cómo se supone que debo hacer esto?
Editar: el código en cuestión podría ser útil;)
La clase de anotación (en gran medida inspirado en la clase de anotación incluye con Marco de Juego):
@Target({ FIELD })
@Retention(RUNTIME)
@play.data.Form.Display(name = "format.datetime", attributes = { "pattern" })
public static @interface JodaDateTime {
String pattern();
}
La clase de formateador personalizado:
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);
}
Para registrar el formateador con el marco, hago esta llamada en un iniciador estático en la clase de aplicación (podría haber un lugar mejor para poner esto, no dude en decirme dónde):
play.data.format.Formatters.register(DateTime.class, new AnnotationDateTimeFormatter());
He confirmado por un solo paso a paso por el depurador que esta llamada se hizo y que no hay errores se tiran, y aún así el formateador no se ejecuta a pesar de la anotación de los campos DateTime apropiadamente así:
@Formats.JodaDateTime(pattern = "dd.MM.yyyy HH:mm:ss")
public DateTime timeOfRequest = new DateTime();
estoy en la pérdida aquí.
¿Tal vez podría publicar su código? – Somatik
Podría de hecho. :) Edité mi publicación original para incluir el código en cuestión. –
¿Has resuelto esto? – Denis