`
san586
  • 浏览: 132696 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring MVC - Binding to multiple commands

阅读更多
需求:扩展spring 3 mvc表单绑定功能,使其能绑定多个command对象,且绑定对象规则按照 model.name 格式进行bind。
描述:spring 3 mvc现有表单绑定功能推荐用 form标签,且仅支持一个 command对象直接的绑定,
<form:form commandName="someCommand1"> 
</form:form> 
绑定规则默认约定按照model的属性名进行匹配,现有的功能存在至少2个弊端:1)不支持多个command 对象绑定;2)如果要绑定除了command外的对象或者参数,必须不能重复现有绑定command 对象中的属性名。
解决思路有2个,本人推荐第2个:
1、form表单中input的name还是按照model.name格式,在 controller中form表单提交方法的签名为:method(HttpServerRequest request,……),在方法中遍历request中的参数,手工的bind。实现手工bind可以写个单独的工具类,用BeanWrapper wrapper = new BeanWrapperImpl(obj)来解决,具体的请参照ss3ex 中的工具类。
2、构建一个实现FactoryBean接口的超类,取名为CommandFactoryBean。以分页需求为例,学生信息分页,表单有2个对象,一个是page对象,另一个是学生对象。CommandFactoryBean类中包含2个属性,一是page类,第二个属性就是通过FactoryBean接口方法getObject()得到的绑定的model类(这里为学生类)。前台from表单:
<form:form commandName="commandFactoryBean"> 
<form:input path="page.pageNo"/>
<form:input path="student.name"/>
</form:form> 
后台controller中方法签名就是
method(……,CommandFactoryBean commandFactoryBean)

肯定还有其他的解决办法,看到的请直接留言。
0
0
分享到:
评论
1 楼 muqingren 2011-04-01  
你这个绑定多个表单对象能实现吗?

相关推荐

Global site tag (gtag.js) - Google Analytics