07.类型转换

1.类型转换认识

      页面所提交过来的数据都是字符串的类型,而model里面的数据类型并不都是字符串,有各种各样的类型int ,Integer, float, String,date…,我们使用servlet来接收数据时都是自己手动转换,struts2可以为我们自动转换,转换的前提是前台提交的字符串和model中的相应的数据类型可以转换。

提交表单时:字符串------其他类型

页面展示:其他类型-------字符串

表单提交时数据类的转换struts给我做了绝大多数,但是时间类型往往需要根据我们自己的需求来转换的。

Struts2默认情况下,struts2解析的时间的格式:“yyyy-MM-dd”

 

下面对之前的代码进行改进,加入birthday属性;然后重写toString把birthday也加进去。

我们会看到控制台正常打印birthday

Person [name=aa, age=1, gender=1, address=fsd, birthday=Thu Jan 02 00:00:00 CST 1992]

 

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

这个包专门做时间转换,要继承StrutsTypeConverter。

package com.zy.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;
	}

}

 这里我们还需要写

注册日期类型转换器

1.局部注册

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

2.全局注册

如果有很多的model类都有时间类型,那么使用局部类型转换器就需要创建很多注册文件,这样不合理。需要全局注册

方法:在classpath下一个属性文件:xwork-conversion.properties

3.页面显示错误信息

当我们把生日的格式写错的时候页面会给我们报错,是英文的

在jsp页面引入taglib标签,

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

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

 

猜你喜欢

转载自blog.csdn.net/weixin_44199723/article/details/85721607