Struts2(9)_Struts2 类型转换

本系列博客汇总在这里:Struts2 汇总


源码工程文件为:struts2_10

一、类型转换认识

  • 页面所提交过来的数据都是字符串的类型,而 model 里面的数据类型并不都是字符串,有各种各样的类型 int ,Integer,float,String,date…,我们使用 servlet 来接收数据时都是自己手动转换,struts2 可以为我们自动转换,转换的前提是前台提交的字符串和 model 中的相应的数据类型可以转换。
  • 提交表单时:字符串 ——> 其他类型。
  • 页面展示:其他类型 ——> 字符串。
  • 表单提交时数据类的转换 struts 做了绝大多数,但是时间类型往往需要根据我们自己的需求来转换的,默认情况下,struts2 解析的时间的格式:“yyyy-MM-dd”

二、自定义转换数据类型

在这里插入图片描述

1、通过自定义类型转换器继承 StrutsTypeConverter 做日期转换器

package com.wyx.converter;

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

import org.apache.struts2.util.StrutsTypeConverter;

public class MyDateConverter extends StrutsTypeConverter
{

	@Override
	public Object convertFromString(Map context, String[] values, Class toClass)
	{
		Date date = null;
		if (values != null && values.length > 0)
		{
			if (toClass == Date.class)
			{
				try
				{
					date = new SimpleDateFormat("yyyy/MM/dd").parse(values[0]);
				} catch (ParseException e)
				{
					e.printStackTrace();
					throw new RuntimeException();
				}
			}
		}
		return date;
	}

	@Override
	public String convertToString(Map context, Object o)
	{
		String dateStr = null;
		if (o != null && o.getClass() == Date.class)
		{
			dateStr = new SimpleDateFormat("yyyy/MM/dd").format((Date) o);
		}
		return dateStr;
	}
}

3、注册日期类型转换器

局部注册

第一步:在要转换的 model 类的同级包中建立一个属性文件,命名要求:model类名-conversion.properties,在文件的内部 key 是要转换的属性名,value 是转换器的全路径。
在这里插入图片描述

全局注册

如果有很多的 model 类都有时间类型,那么使用局部类型转换器就需要创建很多注册文件,这样不合理。需要全局注册。方法:在 classpath 下一个属性文件:xwork-conversion.properties
在这里插入图片描述

如何把错误提示信息转换成中文

1、在 Action 类的同级包下创建一个属性文件, 规则:和Action类同名.properties
2、Key: invalid.fieldvlaue.[要转换的表单中文本域的name:birthday],value 是中文的提示信息,中文在 properties 文件中以 Unicode 的编码的方式。
在这里插入图片描述

三、结果演示

在这里插入图片描述
如有错误,欢迎指正!

发布了448 篇原创文章 · 获赞 210 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_36260974/article/details/103682155