struts2中,使用Jsp提交表单数据时,struts2会自动将表单中的数据封装,并复制给对应Action中的属性.
struts2会自动转换只支持基本数据类型和 "yyyy-MM-dd"形式的日期类型.
如果用户输入的日期类型.不是struts2可识别的格式,就会报错.
在项目中,经常会需要用户输入各种类型的时间.这种情况下我们就需要用到"自定义类型转换器".
Struts2 类型转换接口
接口实现关系TypeConverter接口定义了方法.DefaultTypeConverter是该接口的默认实现.StrutsTypeConverter继承了DefaultTypeConverter类.
自定义类型转换分为 : 局部类型转换 和 全局类型转换
Action实例
public class UserAction extends ActionSupport {
private User user;
private Date birth;
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String register() {
System.out.println(user.getName());
System.out.println(user.getPwd());
System.out.println(user.getAge());
System.out.println(user.getBirth());
return "success";
}
}
局部类型转换
- 我们在自定义类型转换器时,需要继承StrutsTypeConverter类.重写converterFromString 和 convertToString方法
public class MyConverter extends StrutsTypeConverter{
/**
* 把String转换为指定对象
* @param context 当前上下文环境
* @param values jsp表单提交的字符串的值
* @param toClass 要转换的目标类型
*/
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return sdf.parse(values[0]);
} catch (ParseException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 将指定类型转换String
*/
@Override
public String convertToString(Map context, Object o) {
// TODO Auto-generated method stub
return null;
}
}2. 注册转换器
在需要进行类型转换的Action目录(包)下,创建一个新的properties文件.
文件名按照指定规则指定.
文件的命名规则为 : ActionClassName-conversion.properties
举例 :
如果是UserAction中有字段需要进行类型转换.
配置文件命名为:UserAtion-conversion.properties
- 声明配置文件内容
对属性成员进行类型转换时 :
birth=com.se7en.struts02.util.MyConverter(自定义转换器类的全路径)
对属性成员内部变量进行类型转换时 :
user.birth=com.se7en.struts02.util.MyConverter(自定义转换器类的全路径)
全局类型转换
全局类型转换器的定义方法和局部类型转换器相同. 同样是继承StrutsTypeConverter类.实现converterFromString 和 converterToString方法
不同点是配置文件,全局类型转换器的配置文件的命名和位置都与局部类型转换器不同.
配置文件名称 : xwork-conversion.properties
全局类型转换器的配置文件必须放在 src 目录下!!!
全局类型转换器的配置文件必须放在 src 目录下!!!
全局类型转换器的配置文件必须放在 src 目录下!!!
内容 :
java.util.Date=com.se7en.struts02.util.MyConverter
完整的类型转换
public class MyConverter extends StrutsTypeConverter{
/**
* 把String转换为指定对象
* @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;
}
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return sdf.parse(values[0]);
} catch (ParseException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 将指定类型转换String
*/
@Override
public String convertToString(Map context, Object o) {
// TODO Auto-generated method stub
return null;
}
}
网友评论