SpringMVC中自定义绑定BigDecimal类型数据的CustomEditor

simon曦 2008-02-26

问题:

在使用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()));
	}
	
}

相关推荐