不過常用的 BigDecimal 卻不在支援的型態中,導致JSP傳值至Action 時會發生型態轉換的Exception。
先建立負責轉換用的Bean
package common.util;
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();
}
}
然後再至xwork-conversion.properties 中加入一行敘述
java.math.BigDecimal=common.util.BigDecimalConverter