首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Struts1.2 开发自各儿的类型转换器

2012-08-22 
Struts1.2 开发自己的类型转换器在Struts 1.x中提供了一个类型转换器的功能。 例如:声明一个boolean类型的

Struts1.2 开发自己的类型转换器

在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

热点排行