struts2中Double类型的转换

今天做项目,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类进行转换 ,这样就实现了全局的数据类型的转换.

时间: 10-26

struts2中Double类型的转换的相关文章

Swift中基本类型的转换

最近上手学习了Swift的语言,谙习JS的我感觉非常顺眼,在此记录下我的学习过程吧. 因为我对Objective-c接触的不多,所以在oc里头使用的东西目前我可能还有很多不知道他的存在. 最近在用swift写了一些小示例app,很多地方都用到了基本类型的转换,但是我发现他居然没有Integer.parse()这样的东西,所以还是摸索了一番. ps: 我使用的版本是xCode6 bate4(其他版本可能实现又差别) OK,talk is chaep, show you the code! 扩展Do

JavaScript中对象类型的转换小结

对象到字符串和对象到数字类型的转换涉及到两个重要的方法,最终的转换结果会受到这两个方法返回结果的影响,这两个方法就是toString和valueOf.所有的对象都会从Object对象中继承到这两个方法.toString方法 用于返回对象的字符串表示(但是其实也可以不返回字符串).对于默认从Object继承而来的toString方法并不会返回太多有意义的内容.而valueOf方法目的是返回一个可以表示对象的原始类型值,但是由于对象的复杂性,大多数情况下根本不可能用一个原始类型值来表示,所以默认的v

Java中double类型的数据精确到小数点后两位

Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 二: new java.text.DecimalFormat("#.00").format(3.1415926) 三: double d = 3.1415926

OC中的类型强制转换

在Objective-C中,以数字格式组成的字符串经常需要转换为NSNumber对象后再使用.例如有一个字符串对象@"111.22",需要转为NSNumber对象,最简单的方法就是这样:[NSNumber numberWithFloat:[@"111.22" floatValue]]. 这个方法先使用NSString的floatValue方法将字符串转成float,再使用NSNumber的numberWithFloat方法将结果转成NSNumber.但它有一个前提条

Average-计算文件中double类型数字的平均数

Average-计算文件中double类型数字的平均数: //Average-计算文件中double类型数字的平均数 #include<iostream> #include<fstream> #include<cstdlib> int main() { using namespace std; ifstream fin; ofstream fout; double tem,sum,aver; int count = 0; fin.open("numbers.d

Java中double类型与String 类型之间的互相转换

Java中String类型和double类型之间的转换 我们在注册网站的时候,往往需要填写个人信息,如姓名,年龄,出生日期等,在页面上的出生日期的值传递到后台的时候是一个字符串,而我们存入数据库的时候确需要一个日期类型,反过来,在页面上显示的时候,需要从数据库获取出生日期,此时该类型为日期类型,然后需要将该日期类型转为字符串显示在页面上,Java的API中为我们提供了日期与字符串相互转运的类DateForamt.DateForamt是一个抽象类,所以平时使用的是它的子类SimpleDateFor

js中基本类型的转换,进制的转换

一.基本类型的转换 1.数字转字符串 //直接给数字加空的字符串. var num=20; var str=20+" "; console.log(typeof str);//string //使用String()函数,让数字更加显示的转为字符串 var num=20; var str=String(num); console.log(typeof str);//string //使用toString()方法.toString()有一个参数,用来指定转换的基数.(十进制/二进制/八进制

hbase中double类型数据做累加

public static Result incr(String tableFullName, String rowKey, String family, String qualifier, long amount) throws IOException { Table table = HBaseConnectionFactory.getConnection().getTable(TableName.valueOf(tableFullName)); Increment increment = n

java中double类型显示两个小数,比如12.00

Double类型的数据如何保留两位小数? 各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型. 比如     0,返回"0.00": 提示:DecimalFormat       df       =       new       DecimalFormat( "#####0.00 ");                       System.out.println(df.format(d)