19.struts2_ 自定义类型转换


Struts2不能将页面输入的字符串转换到引用类型,需要自定义转换器。

1.开发类型转换器类:一般扩展框架中的 StrutsTypeConverter类,

2.配置类型转器:配置有2种

①基于字段所在Model的包下新建一个ModelClassName-conversion.properties,在文件中植入键值对:

fieldName=类型转换器的全类名(这个类是单例的)第一次使用创建

②基于类型配置

在src下新建 xwork-conversion.properties,键入 待转换类型=类型转换器全类名(不是单实例),加载项目应用时创建


Converter类

public class DateConverter extends StrutsTypeConverter{

	private DateFormat df;
	
	
	public DateConverter() {
		
		df=new SimpleDateFormat("yyyy-MM-dd");
	}
	
	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		if(toClass ==Date.class){
			if(values!=null&&values.length>0){
				String value=values[0];
				try {
					return df.parse(value);
				} catch (ParseException e) {
					e.printStackTrace();
				}
			}
		}
		//没转换成功就返回values
		return values;
	}

	@Override
	public String convertToString(Map context, Object obj) {
		
		if(obj instanceof Date){
			Date date=(Date) obj;
			return df.format(date);
			
		}
		return null;//失败返回Null
	}

}


第一种配置:配置文件需要和对应Model类在一个包下

ConversionAction-conversion.properties配置文件内容

birth=com.hcx.struts2.converters.DateConverter

第二种配置
:全局,在src下新建xwork-conversion.properties 

java.util.Date=com.hcx.struts2.converters.DateConverter


注意:如果将dateformart格式信息写入web.xml中,第二种配置时,会读取不到, 因为DateConverter构造器调用在读取web.xml参数之前。

<context-param>
		<param-name>pattern</param-name>
		<param-value>yyyy-MM-dd hh:mm:ss</param-value>
	</context-param>
Converter类 修改为通过getDateFormat方法获取web.xml中的配置信息
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;
	}
	





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值