Struts2 的类型转换
2014-03-07 21:43
337 查看
1 总体概述:将String类型转化为自定义类型,是浏览器传递的参数转换成相应的对象类型,从服务器跳转到浏览器页面是自定义类型(对象类型)到String类型的转换。
2 流程:当浏览器提交到一个action时候,会找到相应的action类,当调用action类里面set。。方法的时候struts2会自动检测有没有自定义类转换(也就是去找有没有xxAction-conversion.properties文件或者xwork-conversion.properties文件),如果有,则根据.properties文件中的配置找到相应的转换类进行相应的转换。xxAction-conversion.properties文件是局部的类型转换,xwork-conversion.properties文件是一种全局的转换
3 自定义类型转换类的书写有两种方法:
(一)继承DefaultTypeConverter类,重写convertValue(Map context, Object value, Class toType)方法,其中有三个参数,第一个不考虑一般,第二个参数value是一个数组,一定要将其转换为数组类型,第三个参数代表要转换成的类型,是一个对象类型还是一个String类型。
@Override
public Object convertValue(Map context, Object value, Class toType) {
if(Point.class==toType){//转换成自定义类型,
Point point=new Point();
String [] str=(String[]) value;
String [] paramValues=str[0].split(",");
int x=Integer.parseInt(paramValues[0]);
int y=Integer.parseInt(paramValues[1]);
point.setX(x);
point.setY(y);
return point;
}
if(String.class==toType){//如果目标类型是一个String类型,代表服务器向浏览器输出
Point point=(Point) value;
int x=point.getX();
int y=point.getY();
String result="[x="+x+" , y="+y+"]";
return result;
}
return null;
}
(二)继承StrutsTypeConverter类
重写convertFromString(Map context, String[] values, Class toType)方法和public String convertToString(Map map, Object o)方法,里面的参数用法和方法一一样了,因为StrutsTypeConverter这个类是一个抽象类,继承了DefaultTypeConverter
public class Pointconverter3 extends StrutsTypeConverter{
@Override
public Object convertFromString(Map context, String[] values, Class toType) {
List<Point> list=new ArrayList<Point>();
for(String value:values){
Point point=new Point();
String [] paramValues=value.split(",");
int x=Integer.parseInt(paramValues[0]);
int y=Integer.parseInt(paramValues[1]);
point.setX(x);
point.setY(y);
list.add(point);
}
return list;
}
@Override
public String convertToString(Map map, Object o) {
List<Point> list=(List<Point>) o;
StringBuilder sb=new StringBuilder();
sb.append("[");
for(Point point:list){
int x=point.getX();
int y=point.getY();
System.out.println(x);
sb.append("x=").append(x).append(",");
sb.append("y=").append(y);
}
sb.append("]");
return sb.toString();
}
}
2 流程:当浏览器提交到一个action时候,会找到相应的action类,当调用action类里面set。。方法的时候struts2会自动检测有没有自定义类转换(也就是去找有没有xxAction-conversion.properties文件或者xwork-conversion.properties文件),如果有,则根据.properties文件中的配置找到相应的转换类进行相应的转换。xxAction-conversion.properties文件是局部的类型转换,xwork-conversion.properties文件是一种全局的转换
3 自定义类型转换类的书写有两种方法:
(一)继承DefaultTypeConverter类,重写convertValue(Map context, Object value, Class toType)方法,其中有三个参数,第一个不考虑一般,第二个参数value是一个数组,一定要将其转换为数组类型,第三个参数代表要转换成的类型,是一个对象类型还是一个String类型。
@Override
public Object convertValue(Map context, Object value, Class toType) {
if(Point.class==toType){//转换成自定义类型,
Point point=new Point();
String [] str=(String[]) value;
String [] paramValues=str[0].split(",");
int x=Integer.parseInt(paramValues[0]);
int y=Integer.parseInt(paramValues[1]);
point.setX(x);
point.setY(y);
return point;
}
if(String.class==toType){//如果目标类型是一个String类型,代表服务器向浏览器输出
Point point=(Point) value;
int x=point.getX();
int y=point.getY();
String result="[x="+x+" , y="+y+"]";
return result;
}
return null;
}
(二)继承StrutsTypeConverter类
重写convertFromString(Map context, String[] values, Class toType)方法和public String convertToString(Map map, Object o)方法,里面的参数用法和方法一一样了,因为StrutsTypeConverter这个类是一个抽象类,继承了DefaultTypeConverter
public class Pointconverter3 extends StrutsTypeConverter{
@Override
public Object convertFromString(Map context, String[] values, Class toType) {
List<Point> list=new ArrayList<Point>();
for(String value:values){
Point point=new Point();
String [] paramValues=value.split(",");
int x=Integer.parseInt(paramValues[0]);
int y=Integer.parseInt(paramValues[1]);
point.setX(x);
point.setY(y);
list.add(point);
}
return list;
}
@Override
public String convertToString(Map map, Object o) {
List<Point> list=(List<Point>) o;
StringBuilder sb=new StringBuilder();
sb.append("[");
for(Point point:list){
int x=point.getX();
int y=point.getY();
System.out.println(x);
sb.append("x=").append(x).append(",");
sb.append("y=").append(y);
}
sb.append("]");
return sb.toString();
}
}
相关文章推荐
- Spring(一)——总体介绍
- Spring+Quartz的版本问题
- 详细解析Java中抽象类和接口的区别
- java引发的思考----自己是面向对象的程序设计员吗?
- Struts2配置文件中的通配符的使用
- java工程转化成web工程
- Struts2+ajax+json整合简介
- 排序算法(java实现)
- Java 字体控制
- Java的23中设计模式
- spring的IoC初始化和依赖注入
- Java Date类 日期、毫秒、天数之间的各种转换
- Struts2开发流程(详细步骤)
- struts1(3)----文件上传
- Eclipse里web的依赖工程部署的简便方法
- java中引用和对象区别
- Java中StringTokenizer 类
- 【重新上本科】在实际问题中,内存赋值所拖累的效率(java版本)
- 【Eclipse AST】AST的修改
- Spring MVC 教程,快速入门,深入分析