阳光VIP

少壮不努力,老大徒伤悲。平日弗用功,自到临期悔。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

MultiActionController绑定command

Posted on 2012-02-12 19:43  阳光VIP  阅读(207)  评论(0编辑  收藏  举报

dlpower:

一般只见到用SimpleFormController绑定command bean。
请问MultiActionController如何绑定command?

swiminthesea:

Spring MVC的MultiActionController比其它框架的DispatchAction之类的都要来得方便。
MultiActionController可以绑定任意的command,举个例子:

java 代码
  1. public class TestController extends MultiActionController      
  2. {      
  3. public ModelAndView insertAccount(HttpServletRequest request,HttpServletResponse response,Account account)      
  4. {      
  5. }      
  6.      
  7. public ModelAndView insertProduct(HttpServletRequest request,HttpServletResponse response,Product product)      
  8. {      
  9. }      
  10.             
  11. }  

 注意看上面的方法签名,第三个参数就是你要绑定的command,不需要做任何配置,方法签名里第三个参数指定是什么对象,MultiActionController就会给你绑定什么对象。

 

首先在bean.xml里面:

xml 代码
  1. <bean id="methodNameResolver"    
  2. class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">    
  3. <property name="paramName"><value>method</value>    
  4. </property>    
  5. <property name="defaultMethodName"><value>view</value>    
  6. </property>    
  7. </bean>  
  8.   
  9. <bean name="/jsp/test.do" class="org.nightwalker.spaces.web.controller.TestController">    
  10. <property name="methodNameResolver">    
  11. <ref local="methodNameResolver"/>    
  12. </property>    
  13. </bean>  
  14.   

配置呢就这么简单。methodNameResolver指定了调用MultiActionController中方法的方式,例如,如果在你的MultiActionController中有如下方法:
public ModelAndView insertAccount(HttpServletRequest request,HttpServletResponse,Account account)
{
}

那么要调用这个方法,你的JSP页面的请求URL就应该这样写:

xml 代码
  1. <form action="test.do?method=insertAccount">    
  2. </form>  

至于绑定什么command和JSP是没有关系的。你在MultiActionController中的方法签名第三个参数是什么对象,Spring就会把request中参数的值绑定到方法签名的第三个对象中。

江南白衣:

不过在他的源码里有说明 -“--靠第3个参数来绑定比较缺乏灵活性,还是建议你调用它的bind()函数来绑定”。

当然,如果没有要特殊处理的属性,比如Book的Category属性,CoverImage属性,也没啥校验,可以简单的用第三个参数来绑定,又少了一行代码,善哉善哉。