我正在使用一个第三方库,其中有我希望能够通过Spring(版本3.2)表单编辑的对象。问题是对象不使用java bean命名约定,因为在某些情况下属性可以是动态的。相反,对象有object.getAttr("attribute_name")
和object.setAttr("attribute_name", value)
这样的方法。对我来说,编写一个BeanWrapper的实现来包装这种类型的对象是很容易的,因为有一些方法可以查询哪些属性是可用的,等等。
我也不需要自定义编辑器,因为属性大多是内置类型。我所需要的只是一种自定义数据绑定的方法,或者找到插入自定义BeanWrapper的其他方法,以便Spring的表单标记在绑定表单值时知道如何找到对象上的属性。似乎这应该是相当容易的(是为什么BeanWrapper是一个接口,对吗?),但我只是没有看到它…
对于3.2版本,您可以:
- 扩展
BeanPropertyBindingResult
和覆盖createBeanWrapper()
方法 - 扩展
ExtendedServletRequestDataBinder
和覆盖getInternalBindingResult()
方法来返回你的bindingResult
实例。 - 扩展
ServletRequestDataBinderFactory
并返回databinder
实例。 - 扩展
RequestMappingHandlerAdapter
并覆盖createDataBinder()
方法。 - 在dispatcher servlet上下文中使用
order < Ordered.LOWEST_PRECEDENCE
注册处理程序适配器。
所以我认为你需要扩展四个框架类拉起一个自定义的BeanWrapper
到Spring MVC。
也许有更简单的选择