struts2 自定义Converter

        对于页面提交的数据,对基本类型的数据,struts2提供了转换操作,但要是我们如果想将页面提交的数据转换为自定义的类对象,那么我们就需要创建自定义converter。

  •        extends StrutsTypeConverter
  •        extends DefaultTypeConverter

 下面的实现第一种方法,即继承 StrutsTypeConverter 类,模拟情景是,前端提交的数据是点坐标,形如(x,y),后台要将其转化为点对象


 

1.编写Point类

public class Point {
    private int x;
    private int y;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    @Override
    public String toString() {
        return "Point{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }
}

 

2.编写PointAction处理类

public class PointAction {
    private Point point;

    public String execute(){
        System.out.println("x = "+point.getX()+", y = "+point.getY());
        return Action.SUCCESS;
    }

    public Point getPoint() {
        return point;
    }

    public void setPoint(Point point) {
        this.point = point;
    }
}

 

4.编写获取点数据的JSP页面

<form action="point.action" method="post">
    input point(x, y): <input type="text" name="point"/>
    <input type="submit" value="submit"/>
</form>

 

5.配置struts.xml

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

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="point" class="com.action.PointAction">
            <result>/index.jsp</result>
        </action>
    </package>
</struts>

 

至此,如果point的类型是基本数据类型,如int,String等那么后台是能获取得到,但point是自定义的类型,所以我们要编写自定义的converter。

 

6.编写自定义converter

public class PointConverter extends StrutsTypeConverter {
    /**
     * @param map the action context
     * @param strings the String values to be converted, such as those submitted from html
     * @param aClass the class to convert to
     * @return the converted object
     */
    @Override
    public Object convertFromString(Map map, String[] strings, Class aClass) {
        String value  = strings[0]; //(2, 3);
        Point point =  new Point();
        point.setX(Integer.parseInt(value.substring(1,value.indexOf(','))));
        point.setY(Integer.parseInt(value.substring(value.indexOf(',')+1, value.length()-1)));

        return point;
    }

    /**
     * @param map the action context
     * @param o the object to be converted
     * @return the converted String
     */
    @Override
    public String convertToString(Map map, Object o) {
        return ((Point)o).toString();
    }
}

继承StrutsTypeConverter,重写convertFromString( Map map, String[] strings, Class aClass )  和 convertToString( Map map, Object o) 方法,具体参数信息已经在代码注释中说明。convertFromString 方法在处理前端提交的特定类型数据时会调用,而 convertToString 在前端页面要显示特定类型数据时会调用。

 

7.注册自定义converter

不写个配置文件告知系统你写了个自定义converter,系统为什么会知道呢。

配置文件命名为 xwork-conversion.properties  ,与struts.xml文件一样,位于src目录下。

#be converted type = converter
com.pojo.Point = com.converter.PointConverter

即形如   要处理的类 = 对应的转换器 


 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值