struts2局部类型转换器的使用。
2013-09-17 16:00
357 查看
当使用struts2的时候,如果传递的参数不符合action中的类型。
虽然struts会有自动的处理方式,让数据能够显示出来,但数据并没有传递到action中对应的变量中。
比如一个action中有一个Date的成员变量,其名字为birthday.
你可以在result中访问到birthday数据成员,但是并非传递给变量birthday的数据.
对此,我们也需要定义类型转换器,以便让传入的数据能够正确的转换成我们需要的格式。
如上就是一个简单的类型转换器。
对于该类,需要注意两个地方,
第一是其父类为
com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
struts2中提供了多个类型转换器,但是以此转换器为上品,所以通常情况下,请选择该类。
第二则是if(toType == Date.class)
{
String[] params = (String[])value;
return sdf.parse(params[0]);
}
else if(toType == String.class)
{
Date date = (Date)value;
return sdf.format(date);
}
在这段转换代码中,开始时候是通过string数组传递参数。这主要是考虑兼容性。因为传递给action的数据,
可能具有多个值。比如用户选择兴趣爱好,就可能存在多个值。当我们接受到用户的浏览器请求的时候,可能其带来
的参数就是一个字符串数组,而不是一个简单的字符串。
所以,这里通过数组的形式来处理这个字符串转向日期格式的问题。
这里的下面还有一个字符串转为日期的操作。
这种情况被称为双向转换器,因为当你需要在JSP页面中显示你的非String数据的时候,也许你需要按照自己
要求,输出日期的格式。
好了,在完成了类型转换器类的编写好。
我们就需要注册该类型转换器,让其针对某个变量产生作用。我们这里是局部的类型转换器。
其具体的步骤如下:
在我们需要使用类型转换器的action的包下
新建一个文件,文件名为 actionname-conversion.properties
其内容为
变量名= 类型转换器的全路径
如上面的例子,需要将其应用在cn.dzr.action.HelloWorldAction这个类中的birthday成员。
那么,就需要在cn.dzr.action包下新建文件
HelloWorldAction-conversion.properties
其内容则是
birthday=cn.dzr.converter.DateTypeConverter
到此,类型转换器就已经成功的注册了。
虽然struts会有自动的处理方式,让数据能够显示出来,但数据并没有传递到action中对应的变量中。
比如一个action中有一个Date的成员变量,其名字为birthday.
你可以在result中访问到birthday数据成员,但是并非传递给变量birthday的数据.
对此,我们也需要定义类型转换器,以便让传入的数据能够正确的转换成我们需要的格式。
package cn.dzr.converter; import java.util.Date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Map; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; public class DateTypeConverter extends DefaultTypeConverter { @Override public Object convertValue(Map<String, Object> context, Object value, Class toType) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); try { if(toType == Date.class) { String[] params = (String[])value; return sdf.parse(params[0]); } else if(toType == String.class) { Date date = (Date)value; return sdf.format(date); } } catch(ParseException e) { } return null; } }
如上就是一个简单的类型转换器。
对于该类,需要注意两个地方,
第一是其父类为
com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
struts2中提供了多个类型转换器,但是以此转换器为上品,所以通常情况下,请选择该类。
第二则是if(toType == Date.class)
{
String[] params = (String[])value;
return sdf.parse(params[0]);
}
else if(toType == String.class)
{
Date date = (Date)value;
return sdf.format(date);
}
在这段转换代码中,开始时候是通过string数组传递参数。这主要是考虑兼容性。因为传递给action的数据,
可能具有多个值。比如用户选择兴趣爱好,就可能存在多个值。当我们接受到用户的浏览器请求的时候,可能其带来
的参数就是一个字符串数组,而不是一个简单的字符串。
所以,这里通过数组的形式来处理这个字符串转向日期格式的问题。
这里的下面还有一个字符串转为日期的操作。
这种情况被称为双向转换器,因为当你需要在JSP页面中显示你的非String数据的时候,也许你需要按照自己
要求,输出日期的格式。
好了,在完成了类型转换器类的编写好。
我们就需要注册该类型转换器,让其针对某个变量产生作用。我们这里是局部的类型转换器。
其具体的步骤如下:
在我们需要使用类型转换器的action的包下
新建一个文件,文件名为 actionname-conversion.properties
其内容为
变量名= 类型转换器的全路径
如上面的例子,需要将其应用在cn.dzr.action.HelloWorldAction这个类中的birthday成员。
那么,就需要在cn.dzr.action包下新建文件
HelloWorldAction-conversion.properties
其内容则是
birthday=cn.dzr.converter.DateTypeConverter
到此,类型转换器就已经成功的注册了。
相关文章推荐
- struts2-局部类型和全局类型转换器
- Struts2之自定义局部类型转换器、全局类型转换器
- struts2中类型转换器的使用
- struts2注册局部类型转换器
- Struts2之自定义局部类型转换器、全局类型转换器
- Struts2_局部类型转换器
- Struts2之类型转换器的使用
- struts2之类型转换器的简单使用
- Struts2之自定义局部类型转换器、全局类型转换器
- Struts2之自定义局部类型转换器、全局类型转换器
- Struts2自定义类型转换器分为局部类型转换器和全局类型转换器
- struts2之类型转换器的使用(明白原理,不用掌握)
- Struts2内建类型转换器数据器使用简介
- Struts2之类型转换器的使用
- struts2--使用struts2的类型转换器(set,list属性集合)
- Struts2(二)局部与全局类型转换器
- struts2示例代码-自定义局部类型转换器和自定义全局类型转换器
- Struts2的类型转换及输入校验(数组类型的使用)
- 【Struts2学习笔记(7)】类型转换器的两种方法
- Struts2类型转换器配置