struts2的Converter

struts2的Converter所起的作用是在页面数据和Java所支持的数据之间进行转换,在页面中,我们最常用的就是string类型。但是在Java类中,

像int,Date,Map,List等类型,直接将页面所传来的string类型值赋给这些变量,就会引异常,因此在赋值前必须进行类型转换。struts2的Converter就是这个作用。struts为我们准备了基本的Converter,如基本类型(int,double等),还有日期类型,各种集合类型。

不过struts2也给用户留下了自定义转换器的接口,通过继承OGNL.DefaultTypeConverter类,我们可以定义一个转换类。

 

下面仿照一个在页面中画点的项目说明。假设用户可以在jsp页面中输入一个点的坐标,如(10,10),在后台我们就有一个Point类的实例Point(10,10)

与之对应。要想做到这点,我们就需要利用类型转换了,首先定义一个Point类,然后再定义一个PointConverter类用来进行类型转换。在整一PointAction做响用。Point类的源码如下:

[java]  view plain copy
  1. package tutorial;  
  2. public class Point {  
  3.     private int x;  
  4.     private int y;  
  5.     public int getX() {  
  6.         return x;  
  7.     }  
  8.     public void setX(int x) {  
  9.         this.x = x;  
  10.     }  
  11.     public int getY() {  
  12.         return y;  
  13.     }  
  14.     public void setY(int y) {  
  15.         this.y = y;  
  16.     }  
  17.     public Point(int x, int y) {  
  18.         super();  
  19.         this.x = x;  
  20.         this.y = y;  
  21.     }  
  22.     public Point() {  
  23.         super();  
  24.     }  
  25.     @Override  
  26.     public String toString() {  
  27.         // TODO Auto-generated method stub  
  28.         //return "("+getX()+","+getY()+")";  
  29.         StringBuffer sb = new StringBuffer("Point(");  
  30.         sb.append(x).append(",").append(y).append(")");  
  31.         return sb.toString();  
  32.     }  
  33. }  
 

PointConverter的源码:

[java]  view plain copy
  1. package tutorial;  
  2. import java.util.Map;  
  3. import org.apache.struts2.util.StrutsTypeConverter;  
  4. public class PointConverter extends StrutsTypeConverter {  
  5.     @Override  
  6.     public Object convertFromString(Map content, String[] param, Class aclass) {  
  7.         // TODO Auto-generated method stub  
  8.         if(param.length>0){  
  9.             String point = param[0];  
  10.             String[] pointXY = point.split(",");  
  11.             if(pointXY.length==2){  
  12.                 Point p  = new Point();  
  13.                 p.setX(Integer.parseInt(pointXY[0]));  
  14.                 p.setY(Integer.parseInt(pointXY[1]));  
  15.                 return p;                 
  16.             }  
  17.             else{  
  18.                 return null;  
  19.             }  
  20.         }  
  21.         else  
  22.             return null;  
  23.     }  
  24.     @Override  
  25.     public String convertToString(Map content, Object o) {  
  26.         // TODO Auto-generated method stub  
  27.         if(o instanceof Point)  
  28.             return o.toString();  
  29.         return "";  
  30.     }  
  31. }  
 

PointAction的源码:

[c-sharp]  view plain copy
  1. package tutorial;  
  2. import com.opensymphony.xwork2.ActionSupport;  
  3. public class PointAction extends ActionSupport {  
  4.     private Point point;  
  5.     private String msg;  
  6.       
  7.     public String getMsg() {  
  8.         return msg;  
  9.     }  
  10.     public void setMsg(String msg) {  
  11.         this.msg = msg;  
  12.     }  
  13.     public Point getPoint() {  
  14.         return point;  
  15.     }  
  16.     public void setPoint(Point point) {  
  17.         this.point = point;  
  18.     }  
  19.     @Override  
  20.     public String execute() throws Exception {  
  21.         // TODO Auto-generated method stub  
  22.         ///System.out.println(point.toString());  
  23.         return SUCCESS;  
  24.     }  
  25. }  
 

在tutorial目录下建立PointAction-conversion.properties文件:

[xhtml]  view plain copy
  1. point=tutorial.PointConverter  

作用是告诉struts2框架在给Point用setter方法赋值时,用tutorial.PointConverter进行转换。其中key是action中需要转换的属性,value要包括包名。

struts.xml片段:

[xhtml]  view plain copy
  1. <action name="point" class="tutorial.PointAction">  
  2. <result>/point/point.jsp</result>  
  3. <result name="input">/point/point.jsp</result>  
  4. </action>  
 

在point下建立point.jsp文件,如下:

[xhtml] view plain copy
  1. <body>   
  2.   <s:form action="point">  
  3.     <s:textfield name="point"/>  
  4.     <s:textfield name="msg"/>  
  5.       
  6.     <s:property value="msg"/>  
  7.     <s:property value="point"/>  
  8.     <s:submit/>  
  9.   </s:form>  
  10.   </body>  

发布,运行即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值