Struts2對常用的數據類型如String、Integer、Double等都添加了轉換器進行對應的轉換操作。
BigDecimal其實也算作是一種常用的數據類型,但Struts2沒有對該類型設置轉換器。沒有轉換器而且傳遞的值爲空的屬性,Struts2都給默認成了String類型進行處理。如果處理不當,就很容易造成類型轉換異常。
好在Struts2開放了接口,這樣如果有極特別的類型需要用到可以在程序中專門設置轉換器進行相應的處理。
BigDecimal類型的轉換器具體設置如下:
<!--[if !supportLists]-->1、 <!--[endif]-->新增BigDecimal類型轉換器,該轉換器繼承自StrutsTypeConverter。
package com.hzunitech.system.common.convert;
import java.math.BigDecimal;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class BigDecimalConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
BigDecimal bd = null;
if(BigDecimal.class ==toClass){
String bdStr = values[0];
if(bdStr!=null&&!"".equals(bdStr)){
bd = new BigDecimal(bdStr);
}else{
//bd = BigDecimal.valueOf(-1);
}
return bd;
}
return BigDecimal.ZERO;
}
@Override
public String convertToString(Map context, Object o) {
if(o instanceof BigDecimal){
BigDecimal b = new BigDecimal(o.toString()).setScale(2,BigDecimal.ROUND_HALF_DOWN);
return b.toString();
}
return o.toString();
}
}
<!--[if !supportLists]-->2、 <!--[endif]-->在classpath目錄下新建一個xwork-conversion.properties配置文件,具體內容如下:
java.math.BigDecimal=com.hzunitech.system.common.convert.BigDecimalConverter