struts2 Double类型上传默认转换为String

本文转自 http://www.stulog.com/?post=117

 

今天做项目,ssh + Extjs,页面js中定义了几个NumberField,对应的value都是double类型的,其中有个NumberField的name为 name,结果执行的时候报错了,说找不到setName(String name)方法,可我分明写了get和set方法:setName(double name),奇怪,为什么是setName(String name)?原来问题出在struts上,struts自带的类型转换机制将double类型的数值用string转换了,当然出问题了。

通过自定义类型转换可以解决此问题。写一个全局转换器,只要遇到double型的字段,都通过这个转换器来转换。代码如下:

DoubleConvert.java:

 package com.gdqy.DoubleConvert; 
  
 import java.util.Map;  
 import org.apache.struts2.util.StrutsTypeConverter; 
  
 public class DoubleConvert extends StrutsTypeConverter { 
  
     @Override 
     public Object convertFromString(Map context, String[] values, Class toClass) { 
         if (Double.class == toClass) { 
             String doubleStr = values[0]; 
             System.out.println("获取到的字符串" + doubleStr); 
             Double d = Double.parseDouble(doubleStr); 
             return d; 
         } 
         return 0; 
     } 
  
     @Override 
     public String convertToString(Map context, Object o) {  
         return o.toString(); 
     } 
 }

然后,在WebContent/WEB-INF/class目录下新建一个文件:xwork-conversion.properties,内容如下:

java.lang.Double=com.gdqy.DoubleConvert

将struts中的get和set方法定义成Double对象,如:

private Double name;

public void setName(Double name) {
        this.name = name;
    }

重启tomcat,运行程序就没有问题了。

 

全局数据类型转换的原理如下:

在WEB-INF/classes目录下新建一个xwork-conversion.properties文件(在MyEclipse中可直接新建在 src文件夹下),写上: 自定义类型的包名+类名 = 执行转换的类的包名+Converter类名,如: java.lang.Double=com.gdqy.DoubleConvert.这样所在Action类在执行set 和get方法时都要首先要读取classes  目录下的xwork-conversion.properties文件(如果存在),以确定当前的属性要不要执行类型转换,如果需要则调用 properties文件指定的Converter类进行转换 ,这样就实现了全局的数据类型的转换.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值