Struts2类型转化

在servlet中,如果表单提交非字符串数据时,需要进行类型转化,如:提交age

String strAge=req.getparameter("age");
int age=0;
if(strAge!=null){
    age=Integer.parseInt(strAge);
}

在Struts2中,常见的数据类型struts2已经自动进行了类型转化。无需程序员手动转化。


在某些情况下,有自定义的类型时候,struts2不能完成自动类型转化,那么需要手动转化,如果该自定义类型使用的频率较高,手动转化重复代码就会增多——使用Struts2提供的类型转换器来进行类型转化。
案例 比如坐标点(x,y)
原来的处理方式
jsp页面

<body>
   <form action="point.action"  method="post">
    x:<input type="text"  name="point.x"/><br>
    y:<input type="text"  name="point.y"/><br>
   <input  type="submit"  value="提交">
   </form>
  </body>

Action代码

package cn.sxt.action;

import com.opensymphony.xwork2.Action;

import cn.sxt.entity.Point;

public class PointAction {
    private Point point;
    public  String execute(){
        System.out.println(point.getX()+"-----------"+point.getY());
        return Action.SUCCESS;
    }
    public Point getPoint() {
        return point;
    }

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

}

struts.xml

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

返回页面

<body>
    x:<s:property  value="point.x"/><br>
    y:<s:property  value="point.y"/><br>
  </body>

这种方式虽然可以,但是不符合数学的表示形式,所以采用类型转化的处理


使用类型转化的步骤:
(1)编写类型转化器——继承StrutsTypeConverter类
(2)编写xwork-conversion.properties的配置文件,放于src下,内容为

要转化的类型=类型转化器

改进后的坐标案例(直接在前台输入坐标的数学表示形式)
jsp表单页面

<body>
   <form action="point.action"  method="post">
    点:<input type="text"  name="point"/><br>
   <input  type="submit"  value="提交">
   </form>
  </body>

编写类型转化器

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import cn.sxt.entity.Point;

public class PointConverter extends StrutsTypeConverter{
    //将表单提交的字符串数据转化为指定的自定义类型
    //context是ActionContext
    //values是要进行类型转化的数组
    //toclass被转化的类型
    @Override
    public Object convertFromString(Map context, String[] values, Class toclass) {
        String value=values[0];
        Point point=new Point();
        String x=value.substring(1, value.indexOf(","));
        String y=value.substring(value.indexOf(",")+1,value.length()-1);
        point.setX(Integer.parseInt(x));
        point.setY(Integer.parseInt(y));
        return point;
    }
    //将自定义类型转化为字符串在前台页面显示————通过OGNL表达式将会使用该方法进行转化
    //context是ActionContext
    //o是要转化的对象
    @Override
    public String convertToString(Map context, Object o) {
        Point point=(Point)o;
        return "("+point.getX()+","+point.getY()+")";

    }

}

xwork-conversion.properties配置文件(在src下)
要转化的类型=类型转化器


cn.sxt.entity.Point=cn.sxt.converter.PointConverter

显示页面

<body>
    x:<s:property  value="point.x"/><br>
    y:<s:property  value="point.y"/><br>
    点:<s:property value="point"/>
  </body>

测试
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值