struts的自定义类型转换

struts有一套完整的类型转换机制。但在实际应用中我们有时也需要定义自己的类型转换器。下面说一下如何实现自定义类型转换器

一、局部的类型转换

首先要有一个目标类型。可以是自定义的类型如Point也可以j2se中已有的类型如:Date
举例

public class Point{
private int x;
private int y;
//.......
}

当用户在客户端输入类似"3,4"的字符串时。由类型转换器自动转开型为x=3,y=4的Point对象

第二步,要一个类型转换器
要写一个继承ognl.DefaultTypeConverter的类比如

public class PointConverter extends DefaultTypeConverter{
//一定要重写这个方法
@Override
public void convertValue(Map context,Object value,Class toType){
//由客户端字符中向point转换
if(toType==Point.class){
Point point = new Point();
String str = (String)value;
String[] values = strs.split(",");//将输入的值分割为数组
int x = Integer.parseInt(values[0]);
int y = Integer.parseInt(values[1]);
point.setX(x);
point.setY(y);
return point;

}
//由服务端向客户端输出成字符串
if(toType==String.class){
Point point = (Point)value;
int x = point.getX();
int y = point.getY();
String str = "x="+x+",y="+y;
return str;
}
return null;
}
}


第三步:需作类型转换的类型必须为一个action的属性。比如:

public class PointAction{
private Point point;//jsp中应有一个<s:textfield name="point"/>来接收客户输入
//........
}


第四步,配置属性文件,让struts调用类型转换器进行工作:
PointAction-convertion.properties:
[quote]
point=com.mypack.PointConverter
[/quote]

注意,这个properties文件一定要与PointAction.java在同一目录下。且文件名的前半部分与action同名,后面都是固定写法。
当完成以上步骤后,整个类型转换的工作就完成了。测一下吧。。


二、全局的类型转换

上面其实是一个局部的类型转换。下面讲讲全局的。
首先要在classpath(IDE中就是src目录下)建一个固定名为xwrok-conversion.properties.例如:
com.mypackage.Point = com.mypack.PointConverter


这里要讲全局与局部的区别:
1、配置文件名:全局的只有一个叫xwork-conversion.proterties 局部的则由action名+“-conversion.proterties”组成
2、配置文件路径:全局的在类路径的根下。局部的与action路径一至
3、配置文件数量:全局只有一个。局部的根据action的多少,可能多个
4、全局配置中key为完整的类型名,如com.mypack.Point.局部的则是action中的属性名

三、利用struts框架快速开发类型转换器
上面的局部类型转换器是继承ognl.DefaultTypeConverter.其实struts对些作了封装,提供了一个更方便的抽象类org.apache.struts2.util.StrutsTypeConverter
我们的类型转换器只要继承StrutsTypeConverter并实现它提供的抽象方法即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值