2012-05-28 16 views
7

का उपयोग कर इनपुट टेक्स्ट के लिए दिनांक दिनांक प्रारूप सेट करें मैं स्प्रिंग एमवीसी के साथ एक टेक्स्ट फ़ील्ड में दिनांक के प्रारूप को कैसे सेट कर सकता हूं?स्प्रिंग एमवीसी

मैं स्प्रिंग फॉर्म टैग लाइब्रेरी और input टैग का उपयोग कर रहा हूं।

मुझे अब यह मिलता है कि यह Mon May 28 11:09:28 CEST 2012 जैसा कुछ है।

मैं dd/MM/yyyy प्रारूप में दिनांक दिखाना चाहता हूं।

उत्तर

7

साल नियंत्रक में एक तिथि संपादक रजिस्टर:

@InitBinder 
protected void initBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(LocalDate.class, new LocalDateEditor()); 
} 

और फिर डेटा स्वयं संपादक इस तरह दिख सकता:

public class LocalDateEditor extends PropertyEditorSupport{ 

@Override 
public void setAsText(String text) throws IllegalArgumentException{ 
    setValue(Joda.getLocalDateFromddMMMyyyy(text)); 
} 

@Override 
public String getAsText() throws IllegalArgumentException { 
    return Joda.getStringFromLocalDate((LocalDate) getValue()); 
} 
} 

मैं पार्सिंग के लिए अपने ही सार उपयोगिता वर्ग (Joda) का उपयोग कर रहा तिथियां, वास्तव में Joda Datetime library से स्थानीयडेट्स - मानक जावा तिथि/कैलेंडर के रूप में अनुशंसित एक घृणा है, imho। लेकिन आपको विचार मिलना चाहिए। साथ ही, आप एक वैश्विक संपादक पंजीकृत कर सकते हैं, इसलिए आपको इसे प्रत्येक नियंत्रक (मुझे याद नहीं है) करने की ज़रूरत नहीं है।

+0

धन्यवाद! यह मेरे समाधान से निश्चित रूप से बेहतर है। – davioooh

+0

@ डेवियोओह स्प्रिंग 3.0 +?यह प्रासंगिक अध्याय है जो मुझे लगता है कि http://static.springsource.org/spring/docs/current/spring-framework-reference/html/validation.html "प्रॉपर्टी रजिस्टर्स का उपयोग करके" दिखाता है कि कैसे वैश्विक स्तर पर – NimChimpsky

+0

हाँ, मैं वसंत का उपयोग कर रहा हूं 3.1, लेकिन मैं अभी भी इसके लिए नया हूं ... (और सामान्य रूप से स्प्रिंग फ्रेमवर्क के लिए ...) – davioooh

8

हो गया! मैं बस अपना नियंत्रक वर्ग के लिए इस विधि कहा:

@InitBinder 
protected void initBinder(WebDataBinder binder) { 
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
    binder.registerCustomEditor(Date.class, new CustomDateEditor(
      dateFormat, false)); 
} 
6

आप हर नियंत्रक में एक ही कोड को दोहराने के लिए बिना अपने सभी तिथियों स्वरूपित करना चाहते हैं, तो आप एक वर्ग @ControllerAdvice साथ एनोटेट में एक वैश्विक InitBinder बना सकते हैं एनोटेशन।

कदम

1. एक DateEditor वर्ग कि अपनी तिथियाँ स्वरूपित होगा बनाएं, इस तरह:

public class DateEditor extends PropertyEditorSupport { 

    public void setAsText(String value) { 
     try { 
     setValue(new SimpleDateFormat("dd/MM/yyyy").parse(value)); 
     } catch(ParseException e) { 
     setValue(null); 
     } 
    } 

    public String getAsText() { 
     String s = ""; 
     if (getValue() != null) { 
     s = new SimpleDateFormat("dd/MM/yyyy").format((Date) getValue()); 
     } 
     return s; 
    } 

2. एक वर्ग @ControllerAdvice साथ एनोटेट बनाएं (मैं इसे GlobalBindingInitializer कहा जाता है) :

@ControllerAdvice 
    public class GlobalBindingInitializer { 

    /* Initialize a global InitBinder for dates instead of cloning its code in every Controller */ 

     @InitBinder 
     public void binder(WebDataBinder binder) { 
     binder.registerCustomEditor(Date.class, new DateEditor()); 
     } 
    } 

3. आपकी स्प्रिंग एमवीसी कॉन्फ़िगरेशन फ़ाइल (उदाहरण के लिए webmvc-config.xml) में उन पंक्तियों को जोड़ें जो स्प्रिंग को पैकेज को स्कैन करने की अनुमति देते हैं जिसमें आपने अपना ग्लोबल बाइंडिंगइनेनाइज़र क्लास बनाया है। उदाहरण के लिए, यदि आप org.example.common पैकेज में GlobalBindingInitializer बनाया:

<context:component-scan base-package="org.example.common" /> 

समाप्त!

सूत्रों का कहना है:

संबंधित मुद्दे