Spring MVC 学习指南--- 第六章 converter 和formatter

来源:互联网 发布:淘宝网怎么删除评论 编辑:程序博客网 时间:2024/06/01 11:32

Spring可以完成表达数据到对象属性的转换,其实默认提供了很多类型转换器。

详细内容可以参考http://www.cnblogs.com/wewill/p/5676920.html

本文主要讲解converter和formatter的使用。是类似helloworld的程序。


一、spring 中有许多方式实现自动的格式转换,都需要注册

<mvc:annotation-driven conversion-service="具体实现" />

实现:

(1)conversionService  可以转换任意类型为指定类型

(2)formaterService     只能转换String到指定类型,适合web工程

(3)formatterRegistrars  另一种注册formatter的形式,将formatter在registaras直接进行注册。


代码:


配置文件:

<?xml version="1.0" encoding="UTF-8"?>  <beans   xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:p="http://www.springframework.org/schema/p"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:mvc="http://www.springframework.org/schema/mvc"    xsi:schemaLocation="http://www.springframework.org/schema/beans      http://www.springframework.org/schema/beans/spring-beans-4.1.xsd       http://www.springframework.org/schema/context      http://www.springframework.org/schema/context/spring-context-4.1.xsd       http://www.springframework.org/schema/mvc      http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">      <!--<mvc:annotation-driven conversion-service="conversionService" />-->  <!--<mvc:annotation-driven conversion-service="formaterService" />  -->  <mvc:annotation-driven conversion-service="formatterRegistrars" />   <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">  <property name="converters">  <list>  <bean class="Converter.StringToDateConverter">  <constructor-arg type="java.lang.String" value="MM-dd-yyyy"/>       </bean>    </list>    </property>    </bean>    <bean id = "formaterService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">  <property name="formatters">  <set>  <bean class = "DateFormMatter.DateFormatter">  <constructor-arg type="java.lang.String" value="MMddyyyy"/>    </bean>  </set>    </property>    </bean>    <bean id ="formatterRegistrars" class ="org.springframework.format.support.FormattingConversionServiceFactoryBean">  <property name="formatterRegistrars">  <set>  <bean class="DateFormMatter.MyFormatterRegistar">  <constructor-arg type="java.lang.String" value="MM-dd-yyyy"/>    </bean>    </set>      </property>      </bean>  </beans>


converters实现:

package Converter;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import org.springframework.core.convert.converter.Converter;public class StringToDateConverter implements Converter<String, Date>{private String datePattern;@Overridepublic Date convert( String s){SimpleDateFormat dateFormat = new SimpleDateFormat(datePattern);dateFormat.setLenient(false);try {return dateFormat.parse(s);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();throw new  IllegalArgumentException("invalid date format ,Please use this pattern\""+datePattern +"\"");}}public StringToDateConverter(String datePattern){this.datePattern = datePattern;System.out.println("instantiating .... converter with pattern:*"+datePattern);;}}


formatter实现

package DateFormMatter;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;import org.springframework.format.Formatter;public class DateFormatter implements Formatter<Date>{private String datePattern;private SimpleDateFormat dateFormat;public DateFormatter(String datePattern) {super();this.datePattern = datePattern;dateFormat = new SimpleDateFormat(this.datePattern);}@Overridepublic String print(Date date, Locale locale) {return dateFormat.format(date);}@Overridepublic Date parse(String s, Locale locale) throws ParseException {return dateFormat.parse(s);}}




Registrars 定义


package DateFormMatter;import org.springframework.format.FormatterRegistrar;import org.springframework.format.FormatterRegistry;public class MyFormatterRegistar implements FormatterRegistrar {private String datePattern;public MyFormatterRegistar(String datePattern){this.datePattern = datePattern;}@Overridepublic void registerFormatters(FormatterRegistry register) {// TODO Auto-generated method stubregister.addFormatter(new DateFormatter(datePattern));}}







原创粉丝点击