使用自定义PropertyEditor解析Spring自定义日期

时间:2016-05-25 13:22:38

标签: java spring spring-mvc

我有一个以特定格式(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)永远不会被调用。

任何想法为什么?

1 个答案:

答案 0 :(得分:0)

您需要将编辑器添加到Controller类中的弹簧绑定...

@InitBinder
public void initBinder(final WebDataBinder binder) {
    binder.registerCustomEditor(Date.class, new DateTimeEditor();
}