在Struts 1.x中提供了一个类型转换器的功能。
例如:声明一个boolean类型的属性,当把这个属性的值设为Yes,1,on或Y等等时Struts 会把它自动的转换成True类型。
但有些类型Struts 却无法转换。
例如Date 类型的转换:
* 如果是java.sql.Date ,页面日期格式必须为yyyy-mm-dd,才可以转换
* 如果是java.util.Date ,默认情况下Struts 无法转换。
解决办法是我们可以设计一个自定义类型转换器。
自定义类型转换器的实现步骤:
1.实现Struts 的converter接口,并实现其convert方法。
- package com.yx.zzg.<span class="hilite1">struts</span>
- ;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.<span class="hilite3">Date</span>
- ;
- import org.apache.commons.beanutils.Converter;
- /**
- * java.util.<span class="hilite3">Date</span>
- 类型转换器
- * @author Administrator
- *
- */
- public class UtilDateConverter implements Converter {
- public Object convert(Class type, Object value) {
- System.out.println("UtilDateConverter.value=" + value);
- if (value == null) {
- return value;
- }
- if (value instanceof <span class="hilite3">Date</span>
- ) {
- return value;
- }
- <span class="hilite3">Date</span>
- d = null;
- if (value instanceof String) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- try {
- d = sdf.parse((String)value);
- } catch (ParseException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- return d;
- }
- }
- package com.yx.zzg.struts;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import org.apache.commons.beanutils.Converter;
- /**
- * java.util.Date类型转换器
- * @author Administrator
- *
- */
- public class UtilDateConverter implements Converter {
- public Object convert(Class type, Object value) {
- System.out.println("UtilDateConverter.value=" + value);
- if (value == null) {
- return value;
- }
- if (value instanceof Date) {
- return value;
- }
- Date d = null;
- if (value instanceof String) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- try {
- d = sdf.parse((String)value);
- } catch (ParseException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- return d;
- }
- }
2.注册自定义的类型转换器,即把我们自定义的类型转换器注册到 Struts 的类型转换器中。
通常有两种方式类实现注册。
第一种方法采用Servlet的方式:
1.首先定义一个Servlet,并覆写他的init方法
- package com.yx.zzg.<span class="hilite1">struts</span>
- ;
- import java.util.<span class="hilite3">Date</span>
- ;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import org.apache.commons.beanutils.ConvertUtils;
- /**
- * 注册java.util.<span class="hilite3">date</span>
- 转换器
- * @author Administrator
- *
- */
- public class UtilDateConverterInitWithServlet extends HttpServlet {
- @Override
- public void init() throws ServletException {
- System.out.println("UtilDateConverterInitWithServlet.init()");
- //注册自定义类型转换器
- ConvertUtils.register(new UtilDateConverter(), <span class="hilite3">Date</span>
- .class);
- }
- }
- package com.yx.zzg.struts;
- import java.util.Date;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import org.apache.commons.beanutils.ConvertUtils;
- /**
- * 注册java.util.date转换器
- * @author Administrator
- *
- */
- public class UtilDateConverterInitWithServlet extends HttpServlet {
- @Override
- public void init() throws ServletException {
- System.out.println("UtilDateConverterInitWithServlet.init()");
- //注册自定义类型转换器
- ConvertUtils.register(new UtilDateConverter(), Date.class);
- }
- }
2.然后配置web.xml文件便完成了注册。
- <servlet>
- <servlet-name>UtilDateConverterInitWithServlet</servlet-name>
- <servlet-class >com.yx.zzg.struts.UtilDateConverterInitWithServlet</servlet- class >
- <load-on-startup>3 </load-on-startup>
- </servlet>
- <servlet>
- <servlet-name>UtilDateConverterInitWithServlet</servlet-name>
- <servlet-class>com.yx.zzg.<span class="hilite1">struts</span>
- .UtilDateConverterInitWithServlet</servlet-class>
- <load-on-startup>3</load-on-startup>
- </servlet>
第二种方式采用Struts 本身提供的plugin的方式
1.首先定义一个类并实现PlugIn接口,并且实现其方法。
- package com.yx.zzg.<span class="hilite1">struts</span>
- ;
- import java.util.<span class="hilite3">Date</span>
- ;
- import javax.servlet.ServletException;
- import org.apache.commons.beanutils.ConvertUtils;
- import org.apache.<span class="hilite1">struts</span>
- .action.ActionServlet;
- import org.apache.<span class="hilite1">struts</span>
- .action.PlugIn;
- import org.apache.<span class="hilite1">struts</span>
- .config.ModuleConfig;
- public class UtilDateConverterInitWithPlugin implements PlugIn {
- public void destroy() {
- }
- public void init(ActionServlet servlet, ModuleConfig config)
- throws ServletException {
- System.out.println("UtilDateConverterInitWithPlugin.init()");
- ConvertUtils.register(new UtilDateConverter(), <span class="hilite3">Date</span>
- .class);
- }
- }
2.然后配置struts -config.xml文件便完成了注册
- <plug-in className= "com.yx.zzg.struts .UtilDateConverterInitWithPlugin" />
- <plug-in className="com.yx.zzg.<span class="hilite1">struts</span>
- .UtilDateConverterInitWithPlugin"/>
- <plug-in className="com.yx.zzg.<span class="hilite1">struts</span>
- .UtilDateConverterInitWithPlugin"/>
- 转载自:http://blog.youkuaiyun.com/swandragon/article/details/4653817