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

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类,然后就可以在这个控制器内部声明多个处理程序方法了。

package com.apress.springrecipes.court.web;
...
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
public class MemberController extends MultiActionController{
	private MemberService memberService;
	public void setMemberService(MemberService memberService){
		this.memberService = memberService;
	}
	public ModelAndView add(HttpServletRequest request,
		HttpServletResponse response,Member member)throws Exception{
		memberService.add(member);
		return new ModelAndView("redirect:list.htm");
	}
	public ModelAndView remove(HttpServletRequest request,
		HttpServletResponse response)throws Exception{
		String memberName = ServletRequestUtils.getRequiredStringParameter(
			request,"memberName");
		memberService.remove(memberName);
		return new ModelAndView("redirect:list.htm");
	}
	public ModelAndView list(HttpServletRequest request,
		HttpServletResponse response)throws Exception{
		List<Member> members = memberService.list();
		return new ModelAndView("memberList","members",members);
	}
}

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

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

<bean id="memberController"
	class="com.apress.springrecipes.court.web.MemberController">
	<property name="memberService" ref="memberService"/>
</bean>

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

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

MemberController --> /member/*

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

/member/add.htm --> add()
/member/remove.htm --> remove()
/member/list.htm --> list()

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值