struts2 Double类型上传默认转换为String
2015-06-30 16:34
495 查看
本文转自 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类进行转换 ,这样就实现了全局的数据类型的转换.
今天做项目,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类进行转换 ,这样就实现了全局的数据类型的转换.
相关文章推荐
- spring Could not resolve placeholder
- 连接mysql报Communication link failure: java.io.IOException, underlying cause: Unexpected end of input s
- Java常用工具包 Jodd
- JavaWeb学习记录(八)——servlet获取配置信息
- JavaWeb学习记录(七)——MVC操作数据库增删改查与分页功能
- TestNg JAVA 自动化单元测试框架Demo
- TestNg JAVA 自动化单元测试框架Demo
- 2、javaweb listener 对象的属性变更--监听
- 【Spring学习笔记-MVC-16】Spring MVC之重定向-解决中文乱码
- 浅谈Eclipse的内存分析工具MAT(一)
- 管中窥探java虚拟机(一)
- Eclipse 打不开
- java内存泄漏的定位与分析
- Java多线程编程总结
- MyEclipse创建自己类库
- 【Java Swing探索之路系列】之二:Java Swing布局面板组件
- SpringMVC 的 Controller 返回各种视图的处理方式
- JavaWeb学习记录(三)——网页中文编码问题
- javaServlet
- JavaWeb学习记录(四)——日期和数字的格式转换