struts2自定义数据类型转换器(Struts2)

本文详细介绍了Struts2中自定义数据类型转换器的初始化过程和使用方法,通过分析Struts2框架的内部机制,展示了如何配置xwork-conversion.properties文件并实现自定义转换器,以解决日期格式单一的问题。文章还探讨了转换器的生命周期,包括服务器启动时的加载和管理,以及在处理前端请求时如何进行数据类型的转换。
摘要由CSDN通过智能技术生成
  1. 写这篇文章的缘由,同学叫我帮忙搭建立ssi(Struts2+Spring+ibatis)框架,架构搭建成功后,写了个页面测试。其中有日期类型,所以就涉及到了Struts2的自定义数据类型转换器。(Strurts2有默认的日期转换器,但是支持的格式单一)
  2. 由于信息量比较大,文章的内容是关于"自定义数据类型转换器"一些底层的实现过程,会涉及到很多东西。所有难免有纰漏。
  3. 分享给希望了解“自定义数据类型转换器”的来龙去脉的同学,希望对你们有点帮助。纯手工写作,喜欢就点个赞。

-------------------------------概述------------------------------------------
从以下两点来认识Struts2中的自定义类型转换器,你能得到什么?你可以掌握它的整个生命周期。

一、自定义数据类型转换器初始化

二、使用自定义数据类型转换器(Struts2框架来完成),
只需要在xwork-conversion.properties配置自定义的数据类型转换器,
和实现自定义类型转换器(通过继承DefaultTypeConverter,也可以继承其子类StrutsTypeConverter)即可。

---------------------------------来龙去脉-------------------------------------------
 一、自定义数据类型转换器初始化,具体过程

1.服务器启动,加载和管理web.xml中的Filter:

<filter>
	<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

2.调用StrutsPrepareAndExecuteFilter类的初始化方法:init(FilterConfig) void
//初始化调度器Dispatcher(笔者叫法,感觉很贴切)

  Dispatcher dispatcher = init.initDispatcher(config);

3.调度器Dispatcher中进行加载和解析配置文件,初始化IOC容器等的初始化工作,主要初始化方法如下:

   Container container = init_PreloadConfiguration();
	
	接着,加载容器:reloadContainer(List<ContainerProvider>)

4.设置引导容器,比如 XWorkConverter(数据类型转换器,此文章关注点)
// Set the bootstrap container for the purposes of factory creation

   Container bootstrap = createBootstrapContainer();

5.DefaultConfiguration中使用构造器模式构建引导程序,源码片段如下:

  protected Container createBootstrapContainer() {
        ContainerBuilder builder = new ContainerBuilder();
        builder.factory(ObjectFactory.class, Scope.SINGLETON);
        builder.factory(ReflectionProvider.class, OgnlReflectionProvider.class, Scope.SINGLETON);
        builder.factory(ValueStackFactory.class, OgnlValueStackFactory.class, Scope.SINGLETON);
		//类型转换器
        builder.factory(XWorkConverter.class, Scope.SINGLETON);
        builder.factory(XWorkBasicConverter.class, Scope.SINGLETON);
        builder.factory(TextProvider.class, "system", DefaultTextProvider.class, Scope.SINGLETON);
        builder.factory(ObjectTypeDeterminer.class, DefaultObjectTypeDeterminer.class, Scope.SINGLETON);
        builder.factory(PropertyAccessor.class, CompoundRoot.class.getName(), CompoundRo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值