重温经典struts1之自定义类型转换器及注册的两种方式(Servlet,PlugIn)

重温经典struts1之自定义类型转换器及注册的两种方式(Servlet,PlugIn)

前言

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中,有两种方法

1. 通过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>

2. 通过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的自定义转换器讲解到这里,欢迎留言交流,下篇见。

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值