2010-08-11 4 views
16

Ich habe ein Joda-DateTime-Feld in meinem Modell und möchte es in einer JSP-Ansicht formatiert anzeigen. Ich habe es mit der neuen @DateTimeFormat Anmerkung kommentierte:Wie wird eine formatierte DateTime in Spring MVC 3.0 angezeigt?

public class Customer { 
    private DateTime dateOfBirth; 

    @DateTimeFormat(style="M-") 
    public DateTime getDateOfBirth() { 
     return dateOfBirth; 
    } 
} 

Jetzt möchte ich die dateOfBirth in meinem JSP anzuzeigen:

Date of birth: ${customer.dateOfBirth} 

Aber das Ergebnis ist nicht formatiert:

Date of birth: 2010-08-11T11:23:30.148+02:00 

Nach etwas Recherche habe ich herausgefunden, dass ich den Frühling benutzen muss: bind-tag:

<spring:bind path="customer.dateOfBirth"> 
    Date of birth: ${status.value} 
</spring:bind> 

Damit funktioniert es. Aber für diese einfache Aufgabe scheint es zu kompliziert. Die Verwendung dieser Methode in Listen ist noch komplizierter, da Sie den Listenindex in den Bindungspfad integrieren müssen.

Also meine Frage ist: Gibt es eine einfachere Möglichkeit, einen formatierten Wert mit den Spring-Formatierung-Annotationen anzuzeigen?

Antwort

19

Verwenden Sie die spring:eval-Tag, das die @DateTimeFormat Regel versteht:

<spring:eval expression="customer.dateOfBirth" /> 

Alternativ können Sie die @DateTimeFormat Regel aus dem Modell alles zusammen entfernen und format -Tags verwenden Joda als Naikus zeigt.

In einer zukünftigen Version plant Spring, "SpEL", die von Spring aufgerufene "Spring Expression Language", zu integrieren: eval, als standardisierte Unified EL-Implementierung für Ihre JSP-Seiten. Dies würde ermöglichen, dass Inline-Ausdrücke wie ${customer.dateOfBirth} auch durch SPEL geroutet werden. Sie können diese Verbesserungsanfrage hier ablehnen: https://jira.spring.io/browse/SPR-7459.

+0

Frühling: eval funktioniert super. Außerdem habe ich die Verbesserungsanfrage für die Integration von SpEL in JSP hochgestuft. Vielen Dank. –

+0

Ich fand ein kleines Problem mit Feder: Eval in Version 3.0.3. Wenn der Ausdruck null ergibt, wird die Zeichenfolge 'null' ausgegeben. Im Gegensatz dazu gibt das Beispiel spring: bind aus meiner Frage eine leere Zeichenfolge aus, wenn der Ausdruck null ergibt. Gibt es eine Möglichkeit, die Ausgabe von 'Null' zu unterdrücken? Vielen Dank. –

+0

Können Sie JIRA unter http://jira.springframework.org öffnen, um dieses Problem zu melden? – kdonald

19

Da es ein joda Datetime-Objekt und kein Date-Objekt ist, müssen Sie Ihre eigene Formatierungsfunktion oder ein benutzerdefiniertes Tag schreiben.

Wenn Sie es irgendwie in java.util.Date konvertieren können, dann können Sie die eingebaute jstl fmt Taglibrary verwenden.

<fmt:formatDate value="${customer.dateOfBirth}" type="both" 
     pattern="MM-dd-yyyy" /> 

Doch die jüngste jsp schnell können Sie customtags erstellen.

+0

der fmt-Link scheint gebrochen zu sein. –

+0

@noobMama Sie müssen Taglib in JSP-Seite definieren: <% @ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%> –

Verwandte Themen