自定义类型转换器

本文探讨了类型转换器的非单例特性,并以DateConverter为例,详细阐述了其工作原理和应用场景,帮助读者理解如何自定义类型转换器以满足特定需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于Struts不能完成字符串到应用类型的转换,所以需要自定义
自定义类型转换器必须实现ongl.TypeConverter
配置类型转换器的两种方式:
1.基于字段的配置
在字段所在的Model(Action或JavaBean)的包下,新建一个ModelClassName-converter.properties
在该文件中输入键值对:fieldName=类型转换器类名
第一次使用转换器时创建实例
**类型转换器是单例的
2.基于类型的配置
在src下新建xwork-conversion.properties
待转换的类型=类型转换器的全类名
第一次加载时创建实例

**类型转换器不是单例的

=========================================

DateConverter

package com.app;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import javax.servlet.ServletContext;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.util.StrutsTypeConverter;

public class DateConverter extends StrutsTypeConverter {
	
	private DateFormat dateFormat;
	
	public DateConverter(){
		System.out.println("DateConverter......");
	}
	
	public DateFormat getDateFormat(){
		if(dateFormat == null){
			//获取当前WEB应用的初始化参数 pattern
			ServletContext servletContext = ServletActionContext.getServletContext();
			System.out.println(servletContext);
			String pattern = servletContext.getInitParameter("pattern");
			dateFormat = new SimpleDateFormat(pattern);
		}
		return dateFormat;
	}
	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		// TODO Auto-generated method stub
		System.out.println("convertFromString...");
		
		if(toClass == Date.class){
			if(values !=null && values.length >0){
				String value = values[0];
					try {
						return getDateFormat().parseObject(value);
					} catch (ParseException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				
			}
		}
		return values;
	}

	@Override
	public String convertToString(Map context, Object o) {
		// TODO Auto-generated method stub
		System.out.println("convertToString...");
		
		if(o instanceof Date){
			Date date = (Date) o;
			return getDateFormat().format(date);
		}
		
		//若转换失败返回 null
		return null;
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值