2010-08-11 12 views
16

Tengo un campo Joda-DateTime en mi modelo y quiero mostrarlo formateado en una vista JSP. He anotado con la nueva anotación @DateTimeFormat:¿Cómo mostrar un DateTime formateado en Spring MVC 3.0?

public class Customer { 
    private DateTime dateOfBirth; 

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

Ahora quiero mostrar la fechaDeNacimiento en mi JSP:

Date of birth: ${customer.dateOfBirth} 

pero el resultado es sin formato:

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

Después un poco de investigación descubrí, que tengo que usar el resorte: bind-tag:

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

Con esto funciona. Pero parece demasiado complicado para esta simple tarea. Y usar este método en listas es aún más complicado ya que tiene que integrar el índice de lista en la ruta de enlace.

Entonces mi pregunta es: ¿hay una forma más simple de mostrar un valor formateado utilizando las anotaciones de formato de primavera?

Respuesta

19

utilizar la etiqueta spring:eval, que entiende la regla @DateTimeFormat:

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

Como alternativa, puede eliminar la regla @DateTimeFormat de su modelo completamente juntos y utilizar la etiqueta formatDate de Joda como ilustra Naikus.

En una versión futura, Spring planea admitir el bloqueo de "SpEL", que es el "Idioma de Expresión de Primavera" invocado por spring: eval, como la implementación EL Unificada predeterminada para sus páginas JSP. Esto permitiría enrutar expresiones en línea como ${customer.dateOfBirth} a través de SpEL también. Puede votar esta solicitud de mejora aquí: https://jira.spring.io/browse/SPR-7459.

+0

Spring: eval funciona muy bien. Además, superé la solicitud de mejora para integrar SpEL en JSP. Gracias. –

+0

Encontré un pequeño problema con spring: eval en la versión 3.0.3. Cuando la expresión se evalúa como nula, se imprime la cadena 'null'. Por el contrario, el ejemplo de resorte: vincular de mi pregunta imprime una cadena vacía cuando la expresión se evalúa como nula. ¿Hay alguna forma de suprimir la salida de 'null'? Gracias. –

+0

¿Puedes abrir JIRA en http://jira.springframework.org para reportar este problema? – kdonald

19

Como es un objeto joda datetime, y no un objeto Date, tendrá que escribir su propia función de formateo o una etiqueta personalizada.

Si puede convertirlo a java.util.Date de alguna manera, entonces puede usar la incorporada en la biblioteca de jstl fmt.

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

Pero la última JSP rápidamente le permite crear customtags.

+0

el enlace fmt parece estar roto. –

+0

@noobMama debe definir taglib en la página jsp: <% @ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%> –

Cuestiones relacionadas