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标签,
如何把错误提示信息转换成中文呢
- 在Action类的同级包下创建一个属性文件, 规则:和Action类同名.properties
- Key: invalid.fieldvlaue.[要转换的表单中文本域的name:birthday],value是中文的提示信息,中文在properties文件中以Unicode的编码的方式