2010-03-22 5 views
0

J'ai un objet de modèle avec un champ XMLGregorianCalendar. Comment puis-je le lier à un champ de saisie?Lier le champ XMLGregorianCalendar dans Spring MVC avec la vitesse

Pour les champs de chaîne J'utilise:

#springFormInput("model.object.stringfield" "")

mais ne peut pas travailler sur le code correspondant à un XMLGregorianCalendar

+0

Eh bien, qu'attendez-vous de lui , pour se transformer automatiquement en une sorte de sélecteur de date? :) – serg

+0

Non, je m'attends à ce qu'il lie un champ de saisie avec un format de date donné au champ XMLGregorianCalendar ... –

Répondre

0

Voici une solution. Il utilise jodatime mais pourrait probablement être changé pas:

Pour la vue (vitesse dans ce cas):

#springFormInput("model.object.xmlgregoriancalendar.field" "") 

Pour le contrôleur:

@InitBinder 
public void binder(WebDataBinder binder) { 
    binder.registerCustomEditor(XMLGregorianCalendar.class, new PropertyEditorSupport() { 
     public void setAsText(String value) { 
      setValue(createXMLGregorianCalendar(value)); 
     } 

     public String getAsText() { 
      return new SimpleDateFormat("dd/MM/yyyy").format(((XMLGregorianCalendar)getValue()).toGregorianCalendar().getTime()); 
     } 
    }); 
} 

private XMLGregorianCalendar createXMLGregorianCalendar(String date) { 
    LocalDateTime result = DateTimeFormat.forPattern("dd/MM/yyyy").parseDateTime(date).toLocalDateTime(); 
    return xmlDF().newXMLGregorianCalendar(result.toDateTime().toGregorianCalendar()); 
} 


private static DatatypeFactory xmlDF() { 
    try { 
     return DatatypeFactory.newInstance(); 
    } catch (DatatypeConfigurationException ex) { 
     throw new RuntimeException(ex); 
    } 
} 
0

Vous pouvez être mieux convertir la XMLGregorianCalendar à quelque chose plus facile à manipuler comme Calendar or Date avant de le remettre à la couche de présentation.

+0

Le champ XMLGregorianCalendar est dans une classe générée par JAXB qui est utilisée comme modèle, donc il n'y a pas de possibilité de conversion –