解决struts2中Double类型的转换有关问题

解决struts2中Double类型的转换问题

今天做项目的时候,突然遇到个意想不到的问题,在我的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如下:

Java代码
  1. package com.***.rating.helper;
  2. import java.math.BigDecimal;
    import java.util.Map;
    import org.apache.struts2.util.StrutsTypeConverter;
  3. /**
    * @author zhangyx
    * @since 2009-12-18
    */
    public class DoubleConvert extends StrutsTypeConverter {
  4. @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;
    }
  5. @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();
    }
  6. }

 

 

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

Java代码
  1. java.lang.Double=com.prl.helper.DoubleConvert  
java.lang.Double=com.prl.helper.DoubleConvert

 

这是个全局转换器,以后只要遇到double型的字段,都可以通过这个转换器来转换。

重启tomcat,提交表单,运行成功。