dlpower:
一般只见到用SimpleFormController绑定command bean。
请问MultiActionController如何绑定command?
swiminthesea:
Spring MVC的MultiActionController比其它框架的DispatchAction之类的都要来得方便。
MultiActionController可以绑定任意的command,举个例子:
- public class TestController extends MultiActionController
- {
- public ModelAndView insertAccount(HttpServletRequest request,HttpServletResponse response,Account account)
- {
- }
- public ModelAndView insertProduct(HttpServletRequest request,HttpServletResponse response,Product product)
- {
- }
- }
注意看上面的方法签名,第三个参数就是你要绑定的command,不需要做任何配置,方法签名里第三个参数指定是什么对象,MultiActionController就会给你绑定什么对象。
首先在bean.xml里面:
- <bean id="methodNameResolver"
- class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
- <property name="paramName"><value>method</value>
- </property>
- <property name="defaultMethodName"><value>view</value>
- </property>
- </bean>
- <bean name="/jsp/test.do" class="org.nightwalker.spaces.web.controller.TestController">
- <property name="methodNameResolver">
- <ref local="methodNameResolver"/>
- </property>
- </bean>
配置呢就这么简单。methodNameResolver指定了调用MultiActionController中方法的方式,例如,如果在你的MultiActionController中有如下方法:
public ModelAndView insertAccount(HttpServletRequest request,HttpServletResponse,Account account)
{
}
那么要调用这个方法,你的JSP页面的请求URL就应该这样写:
- <form action="test.do?method=insertAccount">
- </form>
至于绑定什么command和JSP是没有关系的。你在MultiActionController中的方法签名第三个参数是什么对象,Spring就会把request中参数的值绑定到方法签名的第三个对象中。
江南白衣:
不过在他的源码里有说明 -“--靠第3个参数来绑定比较缺乏灵活性,还是建议你调用它的bind()函数来绑定”。
当然,如果没有要特殊处理的属性,比如Book的Category属性,CoverImage属性,也没啥校验,可以简单的用第三个参数来绑定,又少了一行代码,善哉善哉。