cheng_you_know

学而时习之!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

spring MVC之将多个动作分组到一个控制器(一)

----------

 

创建多动作控制器

 

根据"每个动作一个控制器"的方法,给应用程序添加动作意味着必须在应用程序上下文中增加控制器。为了使配置更加简单,你想要将Spring MVC应用程序的控制器数量减到最少。Spring MVC提供的MultiActionController类允许你将多个相关的动作分组到一个控制器中。控制器可以扩展MultiActionController,并包含多个处理程序方法来处理多个动作。在多动作控制器中,可以用下面的形式,定义一个或者多个处理程序方法。

public (ModelAndView | Map | String | void) actionName(

HttpServletRequest,HttpServletResponse[,HttpSession][,CommandObject]);

处理程序方法的返回类型可以是ModelAndView(模型及视图名称,或者视图对象)、Map(只有模型)、String

(只有视图名称)或者void(方法本身直接处理HTTP响应)。

当请求通过处理程序映射被映射到多动作控制器时,它必须由该控制器内的某个特定的处理程序方法来处理。MultiActionController允许你用MethodNameResolver对象来配置方法映射。

 

 

 

创建多动作控制器

扩展MultiActionController类,然后就可以在这个控制器内部声明多个处理程序方法了。

Java代码  收藏代码
  1. package com.apress.springrecipes.court.web;  
  2. ...  
  3. import org.springframework.web.bind.ServletRequestUtils;  
  4. import org.springframework.web.servlet.ModelAndView;  
  5. import org.springframework.web.servlet.mvc.multiaction.MultiActionController;  
  6. public class MemberController extends MultiActionController{  
  7.     private MemberService memberService;  
  8.     public void setMemberService(MemberService memberService){  
  9.         this.memberService = memberService;  
  10.     }  
  11.     public ModelAndView add(HttpServletRequest request,  
  12.         HttpServletResponse response,Member member)throws Exception{  
  13.         memberService.add(member);  
  14.         return new ModelAndView("redirect:list.htm");  
  15.     }  
  16.     public ModelAndView remove(HttpServletRequest request,  
  17.         HttpServletResponse response)throws Exception{  
  18.         String memberName = ServletRequestUtils.getRequiredStringParameter(  
  19.             request,"memberName");  
  20.         memberService.remove(memberName);  
  21.         return new ModelAndView("redirect:list.htm");  
  22.     }  
  23.     public ModelAndView list(HttpServletRequest request,  
  24.         HttpServletResponse response)throws Exception{  
  25.         List<Member> members = memberService.list();  
  26.         return new ModelAndView("memberList","members",members);  
  27.     }  
  28. }  

对于add()处理程序方法,控制器将请求参数绑定到类型为Member的命令对象中,因此声明将第三个方法参数声明为Member类型。对于remove()和list()处理程序方法,则只要声明请求和响应参数就可以了。当add()或者remove()方法完成时,要将用户再次重定向到列表页面显示会员。

在声明这个控制器时,为了维护会员列表,需要有一个指向服务层中memberService Bean的引用。

Xml代码  收藏代码
  1. <bean id="memberController"  
  2.     class="com.apress.springrecipes.court.web.MemberController">  
  3.     <property name="memberService" ref="memberService"/>  
  4. </bean>  

由于在web应用程序上下文中配置了ControllerClassNameHandlerMapping,它会注意到这个控制器的类型为

NultiActionController,然后为它生成下面的映射。

Java代码  收藏代码
  1. MemberController --> /member/*  

 默认情况下,MultiActionController会根据方法名称将URL映射到处理程序方法上。对于这个控制器,URL会进行如下映射。

Java代码  收藏代码
  1. /member/add.htm --> add()  
  2. /member/remove.htm --> remove()  
  3. /member/list.htm --> list()  
posted on 2014-04-14 09:38  cheng_you_know  阅读(302)  评论(0编辑  收藏  举报