मैं एक कस्टम फॉर्मेटर लिखने की कोशिश कर रहा हूं (डेटटाइम फ़ील्ड्स के लिए, java.util.Date फ़ील्ड्स के विपरीत), लेकिन इसे काम करने में मुश्किल हो रही है। मैंने अपनी एनोटेशन बनाई है, साथ ही एनोटेशनफॉर्मेटर क्लास को बढ़ाया है। मैं play.data.format.Formatters.register (DateTime.class, नया MyDateTimeAnotationFormatter()) को एप्लिकेशन लोड पर कॉल करता हूं, लेकिन पार्स और प्रिंट विधियां कभी भी ट्रिगर नहीं होती हैं।प्ले फ्रेमवर्क 2.0: कस्टम फॉर्मेटर्स
मुझे यह कैसे करना चाहिए?
संपादित करें: प्रश्न में कोड उपयोगी हो सकता है;)
एनोटेशन वर्ग (भारी एनोटेशन वर्ग से प्रेरित प्ले फ्रेमवर्क) के साथ शामिल:
@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);
}
फ्रेमवर्क के साथ फॉर्मेटर पंजीकृत करने के लिए, मैं इस कॉल को एप्लिकेशन क्लास पर एक स्थिर इनटाइलाइज़र में डालता हूं (वहां बहुत अच्छी जगह हो सकती है इस, मुझे बताने की जहां) के लिए स्वतंत्र महसूस:
play.data.format.Formatters.register(DateTime.class, new AnnotationDateTimeFormatter());
मैं डिबगर है कि इस फोन किया जाता है और कहा कि कोई त्रुटि फेंक दिया जाता है, फिर भी अभी भी फ़ॉर्मेटर बावजूद नहीं चला है के माध्यम से एकल कदम द्वारा की पुष्टि की है डेटटाइम फ़ील्ड को इस तरह उचित तरीके से एनोटेट करने के लिए:
@Formats.JodaDateTime(pattern = "dd.MM.yyyy HH:mm:ss")
public DateTime timeOfRequest = new DateTime();
मुझे यहां नुकसान हो रहा है।
शायद आप अपना कोड पोस्ट कर सकते हैं? – Somatik
मैं वास्तव में कर सकता था। :) मैंने प्रश्न में कोड शामिल करने के लिए अपनी मूल पोस्ट संपादित की। –
क्या आपने इसे हल किया है? – Denis