Sto provando a scrivere un formattatore personalizzato (per i campi DateTime, al contrario dei campi java.util.Date), ma sto facendo fatica a farlo funzionare. Ho creato la mia annotazione, oltre a estendere la classe AnnotationFormatter. Chiamo play.data.format.Formatters.register (DateTime.class, new MyDateTimeAnnotationFormatter()) sul caricamento dell'applicazione, ma i metodi di analisi e stampa non si attivano mai.Play Framework 2.0: formattatori personalizzati
Come posso fare questo?
Edit: il codice in questione potrebbe essere utile;)
La classe di annotazione (fortemente ispirato dalla classe di annotazione incluso con Play quadro):
@Target({ FIELD })
@Retention(RUNTIME)
@play.data.Form.Display(name = "format.datetime", attributes = { "pattern" })
public static @interface JodaDateTime {
String pattern();
}
La classe di formattazione personalizzata:
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);
}
Per registrare il formattatore con il framework, effettuo questa chiamata in un initalizer statico nella classe Application (potrebbe esserci un posto migliore dove mettere questo, sentitevi liberi di dirmi dove):
play.data.format.Formatters.register(DateTime.class, new AnnotationDateTimeFormatter());
Ho confermato da un solo passando attraverso il debugger che questa chiamata viene fatta e che nessun errore sono gettati, ma ancora il formattatore non viene eseguito nonostante annotando i campi DateTime in modo appropriato in questo modo:
@Formats.JodaDateTime(pattern = "dd.MM.yyyy HH:mm:ss")
public DateTime timeOfRequest = new DateTime();
Sono a perdita qui.
forse potresti pubblicare il tuo codice? – Somatik
Potrei davvero. :) Ho modificato il mio post originale per includere il codice in questione. –
Hai risolto questo? – Denis