1 开发原因:
Struts2框架会将表单的参数以同名的方式设置给对应Action的属性中。
该工作主要是由Parameters拦截器做的。而该拦截器中已经自动的实现了String到基本数据类型之间的转换工作。类似于: Beanutils工具。但是日期类型过于复杂:
用户在输入日期等数据类型的时候可:能会有不同的格式,例如yyyy-mm-dd,yyyymmdd......这个时候就需要开发转换器
局部转换器类:
1写转换器类
2配置转换器类(继承一个StrutsTypeconverter类):
在同包的action目录下,新建一个properties文件
properties文件和action类同目录
文件命名规则:ActionClassName-conversion.properties
3内容:
User.birth=转换器类全路径
User.birth指的是需要转换的类的属性:
转换器能否给其他action使用?不能
配置全局转换器:
src/xwork-conversion.properties
内容:
类型全路径=转换器全路径
例如:
java.util.Date=cn.itcast.d_type.Myconverter
struts提交文件上传组件上传文件
/**
* 自定义类型转换器类
*
* @author Jie.Yuan
*
*/
public class MyConverter extends StrutsTypeConverter {
// 新需求: 要求项目中要支持的格式,如: yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日..
// 先定义项目中支持的转换的格式
DateFormat[] df = { new SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("yyyyMMdd"),
new SimpleDateFormat("yyyy年MM月dd日") };
/**
* 把String转换为指定的类型 【String To Date】
*
* @param context
* 当前上下文环境
* @param values
* jsp表单提交的字符串的值
* @param toClass
* 要转换为的目标类型
*/
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
// 判断: 内容不能为空
if (values == null || values.length == 0) {
return null;
}
// 判断类型必须为Date
if (Date.class != toClass) {
return null;
}
// 迭代:转换失败继续下一个格式的转换; 转换成功就直接返回
for (int i=0; i<df.length; i++) {
try {
return df[i].parse(values[0]);
} catch (ParseException e) {
continue;
}
}
return null;
}
@Override
public String convertToString(Map context, Object o) {
return null;
}
}