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

相关推荐

  1. 重温经典struts1页面跳转或请求转发方式

    2023-12-21 11:40:03       39 阅读
  2. 对于IOC注入方式注解和XML)

    2023-12-21 11:40:03       13 阅读
  3. asp.net core 定义过滤器 注入方式和实现

    2023-12-21 11:40:03       14 阅读
  4. spark 定义外部配置参数方式

    2023-12-21 11:40:03       14 阅读

最近更新

  1. Selenium 切换窗口

    2023-12-21 11:40:03       0 阅读
  2. PCA和PCoA分析的python代码

    2023-12-21 11:40:03       0 阅读
  3. 24/07/09数据结构(3.1206)数组OJ单链表实现

    2023-12-21 11:40:03       1 阅读
  4. [Flutter] Android Studio pub get 不起作用

    2023-12-21 11:40:03       1 阅读

热门阅读

  1. Electron训练笔记

    2023-12-21 11:40:03       45 阅读
  2. 理德名人故事:美国投资大师——伯顿·麦基尔

    2023-12-21 11:40:03       46 阅读
  3. ZZ014城市轨道交通运营与维护赛题第3套

    2023-12-21 11:40:03       38 阅读
  4. 北斗卫星导航系统技术指标

    2023-12-21 11:40:03       31 阅读
  5. 我的一天:追求专业成长与生活平衡

    2023-12-21 11:40:03       41 阅读
  6. 【主时钟】USRP

    2023-12-21 11:40:03       34 阅读
  7. 使用virsh migrate进行虚拟机迁移

    2023-12-21 11:40:03       41 阅读