2016-05-25 130 views
0

我有一個以特定格式(dd-MMMM-yy)發送日期字段的窗體,我試圖設置我的Spring應用程序,以便它可以自動將日期解析爲java.util .Date對象。我接觸過使用自定義PropertyEditor解析Spring自定義日期

其中一種方法是,首先創建一個自定義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()); 
    } 
} 

在彈簧上下文創建豆

<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

您需要添加編輯器彈簧控制器類綁定...

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

感謝。理解屬性編輯器需要註冊到控制器webdatabinder中,編輯器才能用於請求我的控制器。 – JCS