提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
Struts的ActionServlet接收用户在浏览器发送的请求,并将用户输入的数据,按照FormBean中定义的数据类型,赋值给FormBean中每个变量,赋值的过程是struts提供的基本数据(int,double,boolean,string,java.sql.Date等)类型转换器完成的,有些数据的类型转换,例如画面上输入的日期格式的字符串,赋值给java.util.Date类型的变量,这种情况,struts就没有给我们提供转换器,这就需要我们自定义转换器,来处理,下面我们就一起学习,怎样编写自定义转换器,以及将自定义转换器注册到struts的两种方式。
自定义转换器
首先我们自定义一个转换器
方法:实现org.apache.commons.beanutils.Converter接口
重写convert方法,来完成日期格式的字符串,转换成java.util.Date类型。
自定义转换器java代码如下:
package xxx.xxx.converter;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.Converter;
public class UtilDateConverter implements Converter {
@Override
public Object convert(Class type, Object value) {
if (value instanceof Date) {
return value;
}
Date date = null;
if (value instanceof String) {
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse((String) value);
} catch (Exception e) {
e.printStackTrace();
}
}
return date;
}
}
注册到struts中
将自定义转换器注册到struts中,有两种方法
- 通过Servlet注册
自定义Servlet类
方法:继承javax.servlet.http.HttpServlet类,重写init方法,通过ConvertUtils.register方法将我们自定义转换器注册到ConvertUtils类。
struts为我们提供的所有数据类型转换器都注册在ConvertUtils类里
自定义Servlet代码如下(示例):
import java.util.Date;
import javax.servlet.http.HttpServlet;
import org.apache.commons.beanutils.ConvertUtils;
import xxx.xxx.converter.UtilDateConverter;
public class UtilDateConverterServlet extends HttpServlet {
@Override
public void init() {
ConvertUtils.register(new UtilDateConverter(), Date.class);
}
}
再将自定义的Sevlet类,通过web.xml,交给struts管理
web.xml文件代码如下:
<servlet>
<servlet-name>UtilDateConverterServlet</servlet-name>
<servlet-class>xxx.xxx.servlet.UtilDateConverterServlet</servlet-class>
<load-on-startup>10</load-on-startup>
</servlet>
- 通过PlugIn注册
自定义PlugIn 类
方法:实现org.apache.struts.action.PlugIn接口,重写init方法,同样通过ConvertUtils.register方法将我们自定义转换器注册到ConvertUtils类
自定义PlugIn代码如下(示例):
package xxx.xxx.plugin;
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;
import xxx.xxx.converter.UtilDateConverter;
public class UtilDateConverterPlugIn implements PlugIn {
@Override
public void destroy() {
}
public void init(ActionServlet servlet, ModuleConfig config) throws ServletException {
ConvertUtils.register(new UtilDateConverter(), Date.class);
}
}
再将自定义的PlugIn类,通过struts-config.xml的plug-in标签,交给struts管理
struts-config.xml文件代码如下:
</struts-config>
中间略
<plug-in className="xxx.xxx.plugin.UtilDateConverterPlugIn"/>
中间略
</struts-config>
到这里,我们就完成了,日期格式的字符串类型,转换成java.util.Date类型的示例
我们启动tomcat,运行一下,看看效果
java.util.Date的输入及显示,就是我们自定义转换器来完成的
运行效果
总结
struts1的自定义转换器讲解到这里,欢迎留言交流,下篇见。