问题:
在使用Spring的SimpleFormController的formBackingObject方法绑定待编辑表单内容时,对于BigDecimal类型的数据Spring绑定会报错,原因是表单域中的String类型数据无法转换为Bean中的BigDecimal
解决办法:
自定义一个特定类型的绑定类,在Controller中的initBinder方法中注册特定类型绑定方法,Spring在碰到此类型的数据时就会使用其转换数据类型
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
CustomBigDecimalEditor bigDecimalEditor = new CustomBigDecimalEditor();
binder.registerCustomEditor(BigDecimal.class, bigDecimalEditor);
super.initBinder(request, binder);
}
/**
* 类说明: BigDecimal custom property editor<br>
* 创建时间: 2008-2-26 下午03:15:03<br>
*
* @author Seraph<br>
* @email: seraph@gmail.com<br>
*/
public class CustomBigDecimalEditor extends PropertyEditorSupport {
public void setAsText(String text) throws IllegalArgumentException {
if (StringUtils.isEmpty(text)) {
// Treat empty String as null value.
setValue(null);
} else {
setValue(NumberUtils.getBigDecimal(text));
}
}
}
/**
* 类说明: Number handle utils<br>
* 创建时间: 2007-10-4 下午05:08:48<br>
*
* @author Seraph<br>
* @email: seraph@gmail.com<br>
*/
public class NumberUtils {
public static int parseInt(long l){
return BigDecimal.valueOf(l).intValue();
}
public static long parseLong(String s) {
return Long.parseLong(s.trim());
}
public static BigDecimal getBigDecimal(String s) {
return BigDecimal.valueOf(Long.parseLong(s.trim()));
}
}
分享到:
评论