2010-08-11 16 views
16

Ho un campo Joda-DateTime nel mio modello e voglio visualizzarlo formattato in una vista JSP. Ho annotato con la nuova annotazione @DateTimeFormat:Come visualizzare un DateTime formattato in Spring MVC 3.0?

public class Customer { 
    private DateTime dateOfBirth; 

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

Ora voglio per visualizzare la dateOfBirth nel mio JSP:

Date of birth: ${customer.dateOfBirth} 

Ma il risultato è formattato:

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

Dopo alcune ricerche che ho scoperto, che devo usare la primavera: bind-tag:

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

Con questo funziona. Ma sembra troppo complicato per questo semplice compito. E l'utilizzo di questo metodo sugli elenchi è ancora più complicato dal momento che è necessario integrare l'indice di elenco nel percorso di associazione.

Quindi la mia domanda è: c'è un modo più semplice per visualizzare un valore formattato utilizzando le annotazioni di formattazione a molla?

risposta

19

Utilizzare il tag spring:eval che comprende la regola @DateTimeFormat:

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

In alternativa, è possibile rimuovere la regola @DateTimeFormat dal modello tutto insieme e utilizzare tag FormatoData di Joda come illustra Naikus.

In una versione futura, Spring prevede di supportare il collegamento di "SpEL", che è il "linguaggio di espressione di primavera" invocato da spring: eval, come l'implementazione Unified EL predefinita per le pagine JSP. Ciò consentirebbe l'instradamento di espressioni in linea come ${customer.dateOfBirth} tramite SpEL. Puoi votare questa richiesta di miglioramento qui: https://jira.spring.io/browse/SPR-7459.

+0

Spring: eval funziona alla grande. Inoltre ho svottolato la richiesta di miglioramento per l'integrazione di SpEL in JSP. Grazie. –

+0

Ho trovato un piccolo problema con spring: eval nella versione 3.0.3. Quando l'espressione restituisce null, viene stampata la stringa "null". Al contrario, la molla: bind esempio dalla mia domanda stampa una stringa vuota quando l'espressione restituisce null. C'è un modo per sopprimere l'output di 'null'? Grazie. –

+0

Puoi aprire JIRA all'indirizzo http://jira.springframework.org per segnalare questo problema? – kdonald

19

Poiché è un oggetto datetime joda e non un oggetto Date, sarà necessario scrivere la propria funzione di formattazione o un tag personalizzato.

Se è possibile convertirlo in java.util.Date in qualche modo, è possibile utilizzare la taglierina integrata di jstl fmt.

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

Ma l'ultima jsp rapidamente ti permette di creare customtags.

+0

il collegamento fmt sembra essere rotto. –

+0

@noobMama è necessario definire taglib nella pagina jsp: <% @ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%> –

Problemi correlati