是否有一种方法可以使用非bean样式的对象作为spring表单的模型属性



我正在使用一个第三方库,其中有我希望能够通过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。

也许有更简单的选择

最新更新