Struts2.1.6中,关于BigDecimal参数的接收,如果在Action中的一个属性是BigDecimal类型,则可以接收到相应的BigDecimal类型参数。但如果Action中有一个自己类的对象,这个对象中包含一个BigDecimal类型的属性时,则在接收页面相应参数的时候就会出错,Struts给出的提示是:set方法错误,该set方法不支持一个String类型的参数,或者说没有一个setXXX(String xxx)的方法。当然没有了,因为这个方法的参数是BigDecimal类型的,这说明Struts在接受页面属性的时候根本没有进行转换,这时候写转换器也没有用,在网上找了很久没有看到合理的解释和解决办法。
个人认为比较简单的解决方法有两个:一是将BigDecimal类型的参数写到Action中,这样就能转换成功了,但这会打破程序对象良好的封装性;另一个方法便是干脆将数据库中BigDecimal类型的字段在DTO中定义为String,到业务处理层在手动的做一次转换。