今天做项目的时候,突然遇到个意想不到的问题,在我的usr.jsp中有一个:
<input size="10" value="0" name="creditLine" />,
这个对应到model里面的private Double creditLine;
@Column(name = "credit_line", precision = 10)
public Double getCreditLine() {
return this.creditLine;
}
public void setCreditLine(Double creditLine) {
this.creditLine = creditLine;
}
其它表单项都是string或者非Double型 ,
表示提交后,报错,提示找不到setCreditLine(String xx)方法,我的creditLine明明是Double型,为什么它非要给我换成String型呢,无奈之下,想到了自定义类型转换,于是写了个DoubleConvert如下:
-
package com.***.rating.helper;
-
import java.math.BigDecimal;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
-
/**
* @author zhangyx
* @since 2009-12-18
*/
public class DoubleConvert extends StrutsTypeConverter {
-
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
//System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>调用类型转换");
//System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>" + toClass);
if (Double.class == toClass) {
String doubleStr = values[0];
//System.out.println("获取到的字符串" + doubleStr);
Double d = null;
if(!doubleStr.equals("")){
d = Double.parseDouble(doubleStr);
}
return d;
}
return 0;
}
-
@Override
public String convertToString(Map context, Object o) {
//System.out.println(">>>>>>>>>>>>>>>>>>value " + o);
//System.out.println("value instanceof Double " + (o instanceof Double));
if(o instanceof Double){
Double d = (Double)o;
BigDecimal b = new BigDecimal(d.doubleValue()).setScale(2,BigDecimal.ROUND_HALF_DOWN);
return b.toString();
}
return o.toString();
}
-
}
然后,在class目录下新建一个文件:xwork-conversion.properties,内容如下:
- java.lang.Double=com.prl.helper.DoubleConvert
java.lang.Double=com.prl.helper.DoubleConvert
这是个全局转换器,以后只要遇到double型的字段,都可以通过这个转换器来转换。
重启tomcat,提交表单,运行成功。
相关推荐
如何将数值型字符转换为数字(Integer,Double) 如何将数字转换为字符 如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的...
2. 深入 STRUTS架构..................................................................................37 2.1. 随便谈谈......................................................................................
注意:默认类型转换(自动类型提升)会丢失精度,但只有三种情况: int>float; long>float; long>double. 看一下他们的有效位就明白。 二进制是无法精确的表示 0.1 的。 进行高精度运算可以用java.math包中...
2. 深入STRUTS 架构..................................................................................37 2.1. 随便谈谈.......................................................................................
int和Integer有什么区别? 答:int是java的原始数据类型,Integer是java为int提供的封装类... 答:基本数据类型8种:int、short、byte、long、float、double、char、boolean String不是基本数据类型,引用数据类型。 ...
如何将数值型字符转换为数字(Integer,Double) 如何将数字转换为字符 如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的...
这是2个压缩包中的第二个,请一并将第一个下载后,随便解压其中一个即可。 如果只希望下载其中一部分即可阅读,可下载另一个pdf: http://download.csdn.net/detail/oqqsun12345678/5215337 内容简介 出版日期: ...
26.如何实现数组和 List 之间的转换? 27.ArrayList 和 Vector 的区别是什么? 28.Array 和 ArrayList 有何区别? 29.在 Queue 中 poll()和 remove()有什么区别? 30.哪些集合类是线程安全的? 31.迭代器 Iterator ...
这是2个压缩包中的第一个,请与第二个一并下载,然后随便解压其中一个即可。如果只想下载其中一部分,可下载pdf: http://download.csdn.net/detail/oqqsun12345678/5215337 这个pdf是665页中的前404页,后面200多页...
多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang....
2,使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:${3 + "5"},结果是:35 使用内建的int函数可对数值取整,如: ${ (x/2)?int } ${ 1.1?int } ${ 1.999?int } ${ -1.1?int } ...
多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java....
然而,由于HTML5的W3C标准规范还未制定,安卓系统中类浏览器Webview自身存在一些局限性,因此仍存在着诸多问题亟需解决,包括:(1)多窗口类浏览器模式问题。安卓上用于加载的Webview视图窗口只是作为类浏览器而...