Struts2的自定义类型转换器

 

Struts2的自定义类型转换器:

1、 要转换的实体类:Circle.java

package com.fql.struts2.convert;

public class Circle {

  private int id;

  private float width;

  private float height;

 

  public int getId() {

    return id;

  }

  public void setId(int id) {

    this.id = id;

  }

  public float getWidth() {

    return width;

  }

  public void setWidth(float width) {

    this.width = width;

  }

  public float getHeight() {

    return height;

  }

  public void setHeight(float height) {

    this.height = height;

  }

}

2、 自定义的类型转换器:CircleConverter.java

 

package com.fql.struts2.convert;

 

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

 

public class CircleConverter extends StrutsTypeConverter{

 

//此方法中的arg1参数为字符串数组,实际传递进来的参数情况如:?circle=2,3&circle=4,5&circle=6,7。参数名相同,参数值不同。但在此只支持一个参数,不支持数组。

public Object convertFromString(Map arg0, String[] arg1, Class arg2) {

        Circle circle=new Circle();

        for (int i = 0; i < arg1.length; i++) {

           String[] c = arg1[i].split(",");

           int w=Integer.parseInt(c[0]);

           int h=Integer.parseInt(c[1]);

           circle.setHeight(h);

           circle.setWidth(w);

       }

        return circle;

    }

 

    public String convertToString(Map arg0, Object arg1) {

        Circle circle=(Circle)arg1;

        return "("+circle.getWidth()+","+circle.getHeight()+")";

    }

 

}

 

3、 自定Action类:TestAction.java

package com.fql.struts2.convert;

 

public class TestAction {

    private int id;

    private Circle circle;//存在一个circle属性,将对它进行转换。

   

    //此方法是页面访问Action的方法。

    public String cal(){

        return "cal_success";

    }

   

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

 

    public Circle getCircle() {

        return circle;

    }

 

    public void setCircle(Circle circle) {

        this.circle = circle;

    }

}

4、 TestAction-conversion.properties文件实现局部的自定义转换器,

此文件和TestAction.java文件在同一目录下:

circle=com.fql.struts2.convert.CircleConverter

5、  Struts的配置文件:struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "http://struts.apache.org/dtds/struts-2.0.dtd">

 

<struts>

    <package name="simple" namespace="/simple" extends="struts-default">

        <action

           name="cal"

           class="com.fql.struts2.convert.TestAction"

           method="cal"

       >

           <result name="cal_success">/struts2/circle.jsp</result>

        </action>

    </package>

</struts>

 

6、 JSP的访问页面:

<a href="simple/cal.action?circle=3,4">类型转换:</a>

 

7、 输出结果:

椭圆:(3.0,4.0)

 

 

对上一个实例的修正:

1、自定义的要转换的类型:

package com.fql.struts2.convert;

 

public class Circle {

   

    private int id;

    private float width;

    private float height;

   

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public float getWidth() {

        return width;

    }

    public void setWidth(float width) {

        this.width = width;

    }

    public float getHeight() {

        return height;

    }

    public void setHeight(float height) {

        this.height = height;

    }

}

2、自定的转换器(返回的为Circle的数组)CircleConvert.java

package com.fql.struts2.convert;

 

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

 

public class CircleConverter1 extends StrutsTypeConverter{

 

       public Object convertFromString(Map arg0, String[] arg1, Class arg2) {

              Circle circles[]=new Circle[arg1.length];

              for (int i = 0; i < arg1.length; i++) {

                     Circle circle=new Circle();

                     String[] c = arg1[i].split(",");

                     int w=Integer.parseInt(c[0]);

                     int h=Integer.parseInt(c[1]);

                     circle.setHeight(h);

                     circle.setWidth(w);

                     circles[i]=circle;

                    

              }

              return circles;

       }

 

       public String convertToString(Map arg0, Object arg1) {

              Circle circle[]=(Circle[])arg1;

              StringBuffer sb=new StringBuffer();

              for (int i = 0; i < circle.length; i++) {

                     Circle circle2 = circle[i];

                     sb.append("(")

                            .append(circle2.getWidth())

                            .append(",")

                            .append(circle2.getHeight())

                            .append(") ");

              }

       }

 

}

3、定义Action:

       package com.fql.struts2.convert;

 

public class TestAction {

    private int id;

    private Circle circle[];

    public String cal(){

        return "cal_success";

    }

   

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

 

    public Circle[] getCircle() {

        return circle;

    }

 

    public void setCircle(Circle[] circle) {

        this.circle = circle;

    }

}

4Struts的配置文件:struts.xml

       <?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "http://struts.apache.org/dtds/struts-2.0.dtd">

 

<struts>

    <package name="simple" namespace="/simple" extends="struts-default">

        <action

           name="cal"

           class="com.fql.struts2.convert.TestAction"

           method="cal"

       >

           <result name="cal_success">/struts2/circle.jsp</result>

        </action>

    </package>

 

</struts>

 

5、类型转换的配置文件(此配置是全局的,要把此文件放到类的根目录,即src目录下)

文件名为xwork-conversion.properties

com.fql.struts2.convert.Circle=com.fql.struts2.convert.CircleConverter1

 

6、对应的JSP文件:

    <a href="simple/cal.action?circle=6,4&circle=119,43">类型转换:</a>

 

7、输出结果:椭圆:6,4, 119,43

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值