2012-05-28 7 views
7

Wie kann ich das Format für ein Datum in einem Textfeld mit Spring MVC einstellen?Setze Datumsformat für einen Eingabetext mit Spring MVC

Ich verwende die Spring Form-Tag-Bibliothek und das input-Tag.

Was ich jetzt bekomme, ist so etwas wie Mon May 28 11:09:28 CEST 2012.

Ich möchte das Datum in dd/MM/yyyy Format anzeigen.

Antwort

7

ein Datum Redakteur yr Controller registrieren:

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

und dann kann der Dateneditor selbst wie folgt aussehen:

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()); 
} 
} 

Ich bin meine eigene abstrakte Utility-Klasse (Joda) für die Analyse unter Verwendung von Daten, in der Tat LocalDates von Joda Datetime library - empfohlen wie der Standard-Java-Datum/Kalender ist ein Greuel, imho. Aber Sie sollten die Idee bekommen. Außerdem können Sie einen globalen Editor registrieren, so dass Sie nicht jeden Controller (ich kann mich nicht erinnern, wie).

+0

Vielen Dank! das ist definitiv besser als meine Lösung. – davioooh

+0

@davioooh Frühjahr 3.0 +?Das ist relevantes Kapitel Ich denke, http://static.springsource.org/spring/docs/current/spring-framework-reference/html/validation.html "using propertyregistars" zeigt, wie man global vorgeht – NimChimpsky

+0

Ja, ich benutze Spring 3.1, aber ich bin noch neu dazu ... (und zu Spring Framework im Allgemeinen ...) – davioooh

8

Fertig! Ich habe diese Methode, um meine Controller-Klasse hinzugefügt:

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

Wenn Sie ohne alle Ihre Daten zu formatieren, die den gleichen Code in jedem Controller zu wiederholen, können Sie einen globalen InitBinder in einer Klasse erstellen können mit @ControllerAdvice kommentierten Anmerkung.

Schritte

1. eine DateEditor Klasse erstellen, die Ihre Reisedaten formatiert werden, wie folgt aus:

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. eine Klasse mit @ControllerAdvice kommentierte erstellen (Ich nannte es 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. Fügen Sie in Ihrer Spring MVC-Konfigurationsdatei (z. B. webmvc-config.xml) die Zeilen hinzu, mit denen Spring das Paket scannen kann, in dem Sie die GlobalBindingInitializer-Klasse erstellt haben. Wenn Sie beispielsweise GlobalBindingInitializer im org.example.common-Paket erstellt haben:

Fertig!

Quellen: