更多的Spring框架引入了轉換和格式化服務的最新版本,以充分利用這些任務的照顧,不知何故離開屬性編輯器系統之後。但是,報告的問題不幸仍然存在:默認的DateFormatter
is unable to properly convert空字符串到null
Date
對象。我發現非常惱人的是Spring文檔contains a date formatter snippet example where the proper guard clauses are implemented這兩個轉換(來自和來自字符串)。框架實現和框架文檔之間的這種差異確實使我非常瘋狂,以至於我一有時間就會致力於完成任務,甚至可以嘗試提交補丁。
在此期間,我建議大家在使用Spring框架的現代版遇到此問題是繼承默認DateFormatter
並覆蓋其parse
方法(其print
方法也一樣,如果它需要的話),以增加以文檔中顯示的形式出現的警衛條款。
package com.example.util;
import java.text.ParseException;
import java.util.Date;
import java.util.Locale;
public class DateFormatter extends org.springframework.format.datetime.DateFormatter {
@Override
public Date parse(String text, Locale locale) throws ParseException {
if (text != null && text.isEmpty()) {
return null;
}
return super.parse(text, locale);
}
}
然後,一些修改必須被施加到XML Spring配置:轉換服務豆必須被定義,並且在mvc
命名空間中的annotation-driven
元件相應的屬性必須正確設置。
<mvc:annotation-driven conversion-service="conversionService" />
<beans:bean
id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<beans:property name="formatters">
<beans:set>
<beans:bean class="com.example.util.DateFormatter" />
</beans:set>
</beans:property>
</beans:bean>
要提供具體的日期格式,該DateFormatter
bean的pattern
屬性必須正確設置。
<beans:bean class="com.example.util.DateFormatter">
<beans:property name="pattern" value="yyyy-MM-dd" />
</beans:bean>
如果你沒有註冊一個自定義的PropertyEditor,它對於非空字符串如何工作? – axtavt 2011-01-26 16:15:05
由於Spring有一些內置的PropertyEditors,如下所示:http://static.springsource.org/spring/docs/3.0.3.RELEASE/spring-framework-reference/html/validation.html#beans-beans-轉換 – 2011-01-27 12:47:11