Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用velocity绑定Spring MVC中的XMLGregorianCalendar字段_Java_Spring_Spring Mvc_Velocity - Fatal编程技术网

Java 用velocity绑定Spring MVC中的XMLGregorianCalendar字段

Java 用velocity绑定Spring MVC中的XMLGregorianCalendar字段,java,spring,spring-mvc,velocity,Java,Spring,Spring Mvc,Velocity,我有一个带有XMLGregorianCalendar字段的模型对象。如何将其绑定到输入字段 对于我正在使用的字符串字段: #springFormInput(“model.object.stringfield”) 但是无法为XMLGregorianCalendar计算出相应的代码,您最好先将XMLGregorianCalendar转换为更易于处理的格式,然后再将其交给表示层。这里有一个解决方案。它使用jodatime,但可能更改为不: 对于视图(本例中为速度): 对于控制器: @InitBinde

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

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

#springFormInput(“model.object.stringfield”)


但是无法为XMLGregorianCalendar计算出相应的代码,您最好先将XMLGregorianCalendar转换为更易于处理的格式,然后再将其交给表示层。

这里有一个解决方案。它使用jodatime,但可能更改为不:

对于视图(本例中为速度):

对于控制器:

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

那么,你期望它能自动变成某种日期选择器吗?:)不,我希望它将具有给定日期格式的输入字段绑定到XMLGregorianCalendar字段……XMLGregorianCalendar字段位于JAXB生成的类中,该类用作模型,因此没有转换的范围
@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);
    }
}