本系列博客汇总在这里: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 的编码的方式。
三、结果演示
如有错误,欢迎指正!