在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方法。
view plaincopy to clipboardprint?
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;
}
}
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方法
view plaincopy to clipboardprint?
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);
}
}
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文件便完成了注册。
view plaincopy to clipboardprint?
<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.struts.UtilDateConverterInitWithServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
第二种方式采用Struts本身提供的plugin的方式
1.首先定义一个类并实现PlugIn接口,并且实现其方法。
view plaincopy to clipboardprint?
package com.yx.zzg.struts;
import java.util.Date;
import javax.servlet.ServletException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.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(), Date.class);
}
}
package com.yx.zzg.struts;
import java.util.Date;
import javax.servlet.ServletException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.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(), Date.class);
}
}
2.然后配置struts-config.xml文件便完成了注册
view plaincopy to clipboardprint?
<plug-in className="com.yx.zzg.struts.UtilDateConverterInitWithPlugin"/>
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zygsee/archive/2010/03/26/5418865.aspx