Struts2自定义类型转换器分为局部类型转换器和全局类型转换器
(1)局部类型转换器
如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用date类型是可以接收到的,但是如果传的是20101112这样类型的字符串,用date类型是获取不到,并且会出现错误的,struts2提供了一种类型转换器供我们使用。
以下为局部类型转换器的开发步骤
a.首先要写一个类来继承DefaultTypeConverter
b.然后覆盖convertValue这个方法,在里面进行数据转型
c.在action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是类名,后面的-conversion.properties是固定的写法,
如:HelloWorldAction-conversion.properties
d.Properties文件里面的内容为:属性名称=类型转换器的全类名(既包名.类名)
如:birthday=com.ljq.type.converter.DateTypeConverter
(2)全局类型转换器
如果业务需求所有的日期都要转换,则可以使用全局类型转换器,只要在src根目录下面放置xwork-conversion.properties文件,并且properties文件中的内容为:
待转换的类型=类型转换器的全类名
如:java.util.Date =com.type.Converter.DateTypeConverter 即可
DefaultTypeConverter
日期转换器
- public classDateTypeConverter extends DefaultTypeConverter{
- public Object convertValue(Map<String, Object> context, Object value,
- Class toType) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
- try {
- if (toType == Date.class) {// 当字符串向Date类型转换时
- //页面传递过来的参数被封装成了String[]
- String[] params =(String[]) value;
- returnsdf.parseObject(params[0]);
- } else if (toType ==String.class) { // 当Date转换成字符串时
- Datedate=(Date)value;
- returnsdf.format(date);
- }
- } catch (java.text.ParseException e) {
- e.printStackTrace();
- }
- return null;
- }
- }
public classDateTypeConverter extends DefaultTypeConverter{
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
try {
if (toType == Date.class) {// 当字符串向Date类型转换时
//页面传递过来的参数被封装成了String[]
String[] params =(String[]) value;
returnsdf.parseObject(params[0]);
} else if (toType ==String.class) { // 当Date转换成字符串时
Datedate=(Date)value;
returnsdf.format(date);
}
} catch (java.text.ParseException e) {
e.printStackTrace();
}
return null;
}
}
对象转换器
- import ognl.DefaultTypeConverter;
- public classUserConverter extends DefaultTypeConverter {
- @Override
- public Object convertValue(Map context,Object value, Class toType) {
- //从页面转到服务器 toType表示要转化的类型,
- if (toType==User.class) {
- /*页面传递过来的参数被封装成了String[]*/
- String[] params = (String[])value;
- User user = new User();
- /*取出user字符串,按,分割成数组*/
- String[] uservalues = params[0].split(",");
- user.setName(uservalues[0]);
- user.setPass(uservalues[1]);
- return user;
- }
- /*从服务器转到页面,显示user参数值,则要转换成字符串*/
- else if (toType==String.class) {
- User user =(User)value;
- return "姓名:"+user.getName()+", 密码:"+user.getPass();
- }
- return null;
- }
- }
import ognl.DefaultTypeConverter;
public classUserConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Map context,Object value, Class toType) {
//从页面转到服务器 toType表示要转化的类型,
if (toType==User.class) {
/*页面传递过来的参数被封装成了String[]*/
String[] params = (String[])value;
User user = new User();
/*取出user字符串,按,分割成数组*/
String[] uservalues = params[0].split(",");
user.setName(uservalues[0]);
user.setPass(uservalues[1]);
return user;
}
/*从服务器转到页面,显示user参数值,则要转换成字符串*/
else if (toType==String.class) {
User user =(User)value;
return "姓名:"+user.getName()+", 密码:"+user.getPass();
}
return null;
}
}
本文详细介绍了Struts2中自定义类型转换器的开发步骤,包括局部类型转换器和全局类型转换器的实现。通过示例代码展示了如何在Action类中使用类型转换器,以及如何在全局配置文件中设置类型转换器。
2187

被折叠的 条评论
为什么被折叠?



