我有一个以特定格式(dd-MMMM-yy)发送日期字段的表单,我正在尝试设置我的spring应用程序,以便它可以自动将日期解析为java.util.Date对象。
我接近这个的一种方法是首先创建一个自定义的PropertyEditorSupport类,它将处理从表单传入/传出到表单的日期解析
public class DateTimeEditor extends PropertyEditorSupport {
@Override
public void setAsText(String value) {
try {
setValue(new SimpleDateFormat("dd-MMMM-yy").parse(value));
} catch (Exception ex) {
setValue(null);
}
}
@Override
public String getAsText() {
String stringDate = "";
try {
stringDate= new SimpleDateFormat("dd-MMMM-yy").format((Date)getValue());
} catch(Exception ex) {
//
}
return stringDate
}
}
然后创建一个自定义PropertyEditorRegistrar来注册上面的PropertyEditorSupport来处理日期
public class CustomPropertyEditorRegistrar implements PropertyEditorRegistrar {
@Override
public void registerCustomEditors(PropertyEditorRegistry registry) {
registry.registerCustomEditor(Date.class, new DateTimeEditor());
}
}
在spring上下文中创建bean
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="propertyEditorRegistrars">
<list>
<bean class="com.test.CustomPropertyEditorRegistrar" />
</list>
</property>
</bean>
我可以看到CustomPropertyEditorRegistrar类的方法registerCustomEditors被多次调用,但DateTimeEditor中的方法(setAsText或getAsText)永远不会被调用。
任何想法为什么?
答案 0 :(得分:0)
您需要将编辑器添加到Controller类中的弹簧绑定...
@InitBinder
public void initBinder(final WebDataBinder binder) {
binder.registerCustomEditor(Date.class, new DateTimeEditor();
}