Java 用velocity绑定Spring MVC中的XMLGregorianCalendar字段
我有一个带有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
#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);
}
}