sturs2转换器啊 很牛X啊 有木有啊!!!

来源:互联网 发布:网络连接器 编辑:程序博客网 时间:2024/06/04 19:15
 

【struts2.0系列3】Struts2自定义类型转换[2]

(2009-08-22 16:02:09)
转载
标签:

struts2

全局类型转换

转换类

集合类型转换

it

分类: Struts2+Spring+Hibernate

一共包含两部分:

              1.全局类型转换

              2.开发中使用的转化类继承StrutsTypeConverter

              2.集合类型转换

 1.全局类型转换

        当有多个Action用到同一个数据对象,且需要进行类型转换

    方法一:局部类型转换,为每个action的   XXAction-conversion.properties中配置【见上一篇】

    方法二:全局类型转换,设置一个全局的properties文件

        配置文件名【固定】:    xwork-conversion.properties

        配置文件路径:classes下,即直接在src中new,与struts.xml位于同一文件夹下

        内容:    需转换对象的类=转换类路径【与局部配置文件不同】

                com.test.bean.Point=com.test.converter.PointConverter   

 

2.开发中使用的转化类继承自    StrutsTypeConverter  而非直接继承 DefaultTypeConverter

                              StrutsTypeConverter为DefaultTypeConverter的子类

   所以在上一篇中的类型那个转化类改写为如下

  import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import com.test.bean.Point;

public class PointConverter2 extends StrutsTypeConverter {

 public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
    
  Point point = new Point();
  
  String[] xy = arg1[0].split(",");
  
  int x = Integer.parseInt(xy[0]);
  int y = Integer.parseInt(xy[1]);
  
  point.setX(x);
  point.setY(y);
  
  return point;
 }

 public String convertToString(Map arg0, Object arg1) {
  Point point = (Point)arg1;
  
  int x = point.getX();
  int y = point.getY();
  
  String result="[x="+x+"  y="+y+"]";
  
  return result;
  
 }

}

        

3.集合类型转换

  A.Action中有一集合对象point

 public class PointAction extends ActionSupport {

 private List point;
 public List getPoint() {
  return point;
 }
 public void setPoint(List point) {
  this.point = point;
 }
 public String execute() throws Exception {
  return SUCCESS;
 
}

 

 B.对应的转化类

   import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import com.test.bean.Point;

public class PointConverter3 extends StrutsTypeConverter {

 public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
  List list = new ArrayList();
  for(int i=0;i<arg1.length;i++)
  {
   Point point = new Point();
   String[] str=arg1[i].split(",");
   
   int x = Integer.parseInt(str[0]);
   int y = Integer.parseInt(str[1]);
   
   point.setX(x);
   point.setY(y);
   
   list.add(point);
  }
  return list;
 }

 public String convertToString(Map arg0, Object arg1) {
  List list =(List)arg1;
  StringBuffer result= new StringBuffer();
  for(int i=0,len=list.size();i<len;i++)
  {
   Point p = (Point)list.get(i);
   result.append("x"+(i+1)+"="+p.getX()+"   y"+(i+1)+"="+p.getY());
  }
  return result.toString();
 }

}

 

C.在PointAction-conversion.properties中配置

   point=com.test.converter.PointConverter3

 

D.input.jsp中,多个点输入使用的name相同

    <h3><font color="red">使用逗号将点的坐标隔开 </font></h3>

    <s:form action="pointCoverter">
    <s:textfield name="point" label="坐标"></s:textfield>
    <s:textfield name="point" label="坐标2"></s:textfield>
    <s:textfield name="point" label="坐标3"></s:textfield>
    <s:textfield name="age" label="年龄"></s:textfield>
    <s:textfield name="date" label="生日"></s:textfield>
    <s:textfield name="username" label="姓名"></s:textfield>
    <s:submit label="提交"></s:submit>
   </s:form>

 

E.output.jsp显示结果

  坐标<s:property value="point"/><br>
  年龄:<s:property value="age"/><br>
  姓名:<s:property value="username"/><br>
  生日:<s:property value="date"/><br>

整体流程与上一篇博文中介绍一致


【struts2.0系列3】Struts2自定义类型转换[2]【struts2.0系列3】Struts2自定义类型转换[2]