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即可

2011031623074589.png

代码

Action类

package
com.ljq.action;
import
java.util.Date;
public
class
HelloWorldAction{
//
日期
private
Datebirthday;
//
枚举
private
Gendergender;
public
Stringexecute(){
return
"
success
"
;
}
public
DategetBirthday(){
return
birthday;
}
public
void
setBirthday(Datebirthday){
System.out.println(
"
birthday=
"
+
birthday);
this
.birthday
=
birthday;
}
//
自定义枚举
public
enum
Gender{
MAN,WOMEN
}
public
GendergetGender(){
return
gender;
}
public
void
setGender(Gendergender){
System.out.println(
"
gender=
"
+
gender);
this
.gender
=
gender;
}
}

日期类型转换器

package
com.ljq.type.converter;
import
java.text.SimpleDateFormat;
import
java.util.Date;
import
java.util.Map;
import
com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
/**
*日期自定义类型转换器
*
*
@author
jiqinlin
*
*/
public
class
DateTypeConverter
extends
DefaultTypeConverter{
@SuppressWarnings(
"
unchecked
"
)
@Override
public
ObjectconvertValue(Map
<
String,Object
>
context,Objectvalue,
ClasstoType){
SimpleDateFormatsdf
=
new
SimpleDateFormat(
"
yyyyMMddHH:mm:ss
"
);
try
{
if
(toType
==
Date.
class
){
//
当字符串向Date类型转换时
String[]params
=
(String[])value;
return
sdf.parseObject(params[
0
]);
}
else
if
(toType
==
String.
class
){
//
当Date转换成字符串时
Datedate
=
(Date)value;
return
sdf.format(date);
}
}
catch
(java.text.ParseExceptione){
e.printStackTrace();
}
return
null
;
}
}

枚举类型转换器

package
com.ljq.type.converter;
import
java.util.Map;
import
com.ljq.action.HelloWorldAction.Gender;
import
com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
/**
*枚举自定义类型转换器
*
*
@author
jiqinlin
*
*/
public
class
GenderTypeConverter
extends
DefaultTypeConverter{
@Override
public
ObjectconvertValue(Map
<
String,Object
>
context,Objectvalue,
ClasstoType){
if
(toType
==
Gender.
class
){
//
当字符串向Gender类型转换时
String[]params
=
(String[])value;
return
Gender.valueOf(params[
0
]);
}
else
if
(toType
==
String.
class
){
//
当Gender转换成字符串时
Gendergender
=
(Gender)value;
return
gender.toString();
}
return
null
;
}
}

配置类型转换器

测试路径
日期
http:
//
localhost:8083/struts2/control/employee/list_execute.do?birthday=2011031523:34:55
枚举
http:
//
localhost:8083/struts2/control/employee/list_execute.do?gender=WOMEN
局部类型转换器:HelloWorldAction
-
conversion.properties
birthday
=
com.ljq.type.converter.DateTypeConverter
gender
=
com.ljq.type.converter.GenderTypeConverter
全局类型转换器:xwork
-
conversion.properties
java.util.Date
=
com.ljq.type.converter.DateTypeConverter

在页面打印日期和枚举的值

birthday=${birthday}

gender=${gender}