前面两种方式都需要controller继承该类
第一种 下面看不到的位置是TRUE
![]()
第二种方式
![]()
第三种
3、使用ConverstionService
Spring3新引入了Converter系统,而ConversionService则是一个Facade类,用来封装底层实现而对外提供便捷的类型转换。所以这里不能重用之间的DateEditor了,不过大致逻辑还是一样的。另外补充说明一下,Converter是处理任意两类型间的转换,而Formatter是处理字符串和另一类型之间的转换的。可以看出来,Formatter是一类特殊的Converter,并且在处理数据绑定时,Formatter比Converter更加合适。所以我们这里就用Formatter来做:
- public class DateFormatter implements Formatter<Date> {
-
- @Override
- public String print(Date object, Locale locale) {
- return null;
- }
-
- @Override
- public Date parse(String text, Locale locale) throws ParseException {
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- Date date = null;
- try {
- date = format.parse(text);
- } catch (Exception e) {
- format = new SimpleDateFormat("yyyy-MM-dd");
- date = format.parse(text);
- }
- return date;
- }
-
- }
这里我们只写String到Date的逻辑。然后需要将DateFormatter注册到一个ConversionService中,最后再将ConversionService注册到Spring MVC中。
- <bean id="conversionService"
- class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
- <property name="formatters">
- <set>
- <bean class="com.test.common.core.DateFormatter"></bean>
- </set>
- </property>
- </bean>
如果是用<mvc:annotation-driven />的童鞋,那么很简单,只需要:
- <mvc:annotation-driven conversion-service="conversionService"/>
而未使用<mvc:annotation-driven />的童鞋,需要定义一个WebBindingInitializer(或者使用ConfigurableWebBindingInitializer),然后注入到RequestMappingHandlerAdapter中去:
- <bean
- class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
- <property name="webBindingInitializer" ref="webBindingInitializer">
- </property>
- </bean>
-
- <bean id="webBindingInitializer" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
- <property name="conversionService" ref="conversionService"></property>
- </bean>
此时可能有人会问,如果同时使用PropertyEditor和ConversionService,执行顺序是什么呢?内部首先查找PropertyEditor进行类型转换,如果没有找到相应的PropertyEditor再通过ConversionService进行转换。
4、PropertyEditor的自动注册
对了,这里再稍带提一下自动注册PropertyEditor,只需要将JavaBean和JavaBean名称+Editor这两个类放在同一包下,那么JavaBeans的基础结构会自动发现PropertyEditor的类,而无需你手动注册~