Ich versuche, einen benutzerdefinierten Formatierer (für DateTime-Felder, im Gegensatz zu java.util.Date Felder) zu schreiben, aber ich habe es schwer, dies zu arbeiten. Ich habe meine Annotation erstellt und die AnnotationFormatter-Klasse erweitert. Ich rufe play.data.format.Formatters.register (DateTime.class, new MyDateTimeAnnotationFormatter()) beim Laden der Anwendung auf, aber die Analyse- und Druckmethoden werden niemals ausgelöst.Play Framework 2.0: Benutzerdefinierte Formatierer
Wie soll ich das machen?
Edit: der Code in Frage könnte hilfreich sein;)
Die Annotation-Klasse (die stark von der Annotation-Klasse inspiriert mit Play Framework enthalten):
@Target({ FIELD })
@Retention(RUNTIME)
@play.data.Form.Display(name = "format.datetime", attributes = { "pattern" })
public static @interface JodaDateTime {
String pattern();
}
Die benutzerdefinierte Formatter-Klasse:
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);
}
Um den Formatierer mit dem Framework zu registrieren, mache ich diesen Aufruf in einem statischen Initializer auf der Application-Klasse (es könnte sehr gut einen besseren Ort sein, um zu setzen) Dabei fühlen Sie sich frei, mir zu sagen, wo):
play.data.format.Formatters.register(DateTime.class, new AnnotationDateTimeFormatter());
ich von Einzelschritten durch den Debugger bestätigt haben, dass dieser Aufruf gemacht wird und dass keine Fehler ausgelöst werden, aber immer noch die Forma ausgeführt wird nicht trotz die Felder DateTime wie folgt mit Anmerkungen zu versehen:
Ich bin hier Verlust.
vielleicht könnten Sie Ihren Code veröffentlichen? – Somatik
könnte ich in der Tat. :) Ich habe meinen ursprünglichen Post bearbeitet, um den fraglichen Code einzuschließen. –
Haben Sie das gelöst? – Denis