今天做项目的时候,突然遇到个意想不到的问题,在我的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.prl.helper;
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) {
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>调用类型转换");
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>" + 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) {
System.out.println(">>>>>>>>>>>>>>>>>>value " + o);
System.out.println("value instanceof Double " + (o instanceof Double));
return o.toString();
}
}
然后,在class目录下新建一个文件:xwork-conversion.properties,内容如下:
java.lang.Double=com.prl.helper.DoubleConvert
这是个全局转换器,以后只要遇到double型的字段,都可以通过这个转换器来转换。
重启tomcat,提交表单,运行成功。