使用velocity在Spring MVC中绑定XMLGregorianCalendar字段

时间:2010-03-22 17:30:37

标签: java spring spring-mvc velocity

我有一个带有XMLGregorianCalendar字段的模型对象。如何将其绑定到输入字段?

对于我正在使用的字符串字段:

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

但无法计算出XMLGregorianCalendar的相应代码

2 个答案:

答案 0 :(得分:0)

最好将XMLGregorianCalendar转换为更容易处理的内容,例如Calendar or Date,然后再将其移交给表示层。

答案 1 :(得分:0)

这是一个解决方案。它使用jodatime,但可能会改为:

对于视图(在这种情况下为速度):

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

对于控制器:

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