自定义类型转换器(转换器的注册方法)

类型转换拦截器:把参数转换为action使用的格式,从客户端传过来的任何数据都是字符串类型的,struts2提供了一些转换器,如:字符串转整数,字符串转集合,字符串转日期。然而有些类型struts2并不能帮我们转换。这时需要自定义类型转换器。

字符串转各种类型的工程下载地址如下:http://download.csdn.net/source/2883615

自定义类型转换器:

1.写一个类型转换器:

//这是一个java.awt.Point的类型转换器

package com.xie.convertors;

import java.awt.Point;

 

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

 

 

public class PointConvertor extends DefaultTypeConverter {

 

    @Override

    public Object convertValue(Object value, Class toType) {

       if (toType==Point.class) {

           Point p=new Point();

           String[] str=(String[]) value;

           String[] xy=str[0].split(",");

           p.x=Integer.parseInt(xy[0]);

           p.y=Integer.parseInt(xy[1]);

           return p;

       }

 

       return super.convertValue(value, toType);

    }     

}

2.注册类型转换器:

有三种方法,注册局部转换器:命名规范:ationname-conversion.propertiesactionname必须与对应的action的名字一样),存放路径:与action的在同一路径文件内容:p=com.xie.conver.PointConvertorpaction的成员变量,当struts2的默认类型转换器无法处理p时,就交给com.xie.conver.PointConvertor类型转换器处理)

 

注册全局转换器:命名规范:xwork-conversion.properties(这是固定写法),存放路径:位于src目录下,文件内容:java.awt.Point=com.xie.convertors.PointConvertor(前边是遇到struts2不能自动转换的类型,后边是指定的这种类型的自定义转换器)

注解指定自定义转换器:查了struts2.2.1的帮助文档,没有发现注解指定转换器。所以我不知道。

这儿通常会出现如下异常:

Jsp前端错误提示:

Struts has detected an unhandled exception:

Messages:

·  No result defined for action com.xie.interceptor.InterceptorAction and result input

通常是struts2默认类型转换失败,同时没有找到自定义的转换器。

 

后台错误提示

Error setting expression 'p' with value '[Ljava.lang.String;@a498d0'

ognl.MethodFailedException: Method "setP" failed for object com.xie.convertor.action.Convertor@e426a3 [java.lang.NoSuchMethodException: com.xie.convertor.action.Convertor.setP([Ljava.lang.String;)]

这个错误是:没有找到setPString)方法,即转换失败。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值