Spring之MultiActionController 详解

MultiActionController 详解
Spring提供了一个多动作控制器,用于支持在一个控制器里添加多种功能处理方法,即在一个控制器中存放多个功能处理方法,例如

public interface BaseInterface {
	/**
	 * 展示信息列表视图
	 */
	public ModelAndView list(HttpServletRequest request,HttpServletResponse response) throws Exception;
	/**
	 * 增加对象视图
	 */
	public ModelAndView add(HttpServletRequest request,HttpServletResponse response) throws Exception;
	/**
	 * 编辑对象视图
	 */
	public ModelAndView edit(HttpServletRequest request,HttpServletResponse response) throws Exception;
	/**
	 * 只读对象视图
	 */
	public ModelAndView read(HttpServletRequest request,HttpServletResponse response) throws Exception;
	/**
	 * 保存对象功能视图
	 */
	public void save(HttpServletRequest request,HttpServletResponse response) throws Exception;
	/**
	 * 更新对象功能视图
	 */
	public void update(HttpServletRequest request,HttpServletResponse response) throws Exception;
	
}

 

控制器可以实现此接口。


MultiActionController 的两个重要属性:

delegate  :功能处理的委托对象,即我们要调用请求处理方法所在对象。
methodNameResolver:功能处理方法名解析器,根据请求的url信息来解析它将调用的方法,需要在配置文件中定义此解析器 。

MultiActionController 如何将不同的请求发送到控制器里的那些对应的方法呢?MultiActionController 提供了2种使用方式 即extends MultiActionController 并在子类指定由MethodNameResolver解析的方法,第二种 定义一个代理对象,由它调用Resolver解析的方法,此方式需需要定义delegate。

 

methodNameResolver提供了三种方式:
org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver

org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver

org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver

1.InternalPathMethodNameResolver
MultiActionController的默认实现,提供从请求URL路径解析功能方法的方法名,从请求的最后一个路径(/)开始,并忽略扩展名;如请求URL是“/user/list.html”,则解析的功能处理方法名为“list”,即调用list方法。该解析器还可以指定前缀和后缀,通过prefix和suffix属性,如指定prefix=”test_”,则功能方法名将变为test_list;
2. PropertiesMethodNameResolver
提供自定义的从请求URL解析功能方法的方法名,使用一组用户自定义的模式到功能方法名的映射,映射使用Properties对象存放,
3.ParameterMethodNameResolver(推荐使用)
提供从请求参数解析功能处理方法的方法名。

举例

 
    
      
    
    
      
         
     
         
           
            
      
      
       
       doTest
      
      
        
     
         
    
    
      
    
    
      
      
     
      
        
     
      
    
    
     

 

当methodNameResolver分别设置为
 
aResolver访问方式为:
 
http://127.0.0.1:8899/SpringMVC/spring/abc/doTest
 
bResolver访问方式为:
 
http://127.0.0.1:8899/SpringMVC/spring/abc/test.do


 
cResolver访问方式为:
 
http://127.0.0.1:8899/SpringMVC/spring/abc.do?action=doTest

 

功能处理方法的格式:
public (ModelAndView | Map | String | void) actionName(HttpServletRequest request, HttpServletResponse response, [,HttpSession session] [,AnyObject]);

在4个形式参数中,request和response是必须的,session和object是可选的


实现方式一:

public class WebController extends MultiActionController implements BaseInterface{

	@Override
	public ModelAndView list(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Map
    
    
     
      model=HttpUtil.convertModel(request);
		Page page=HttpUtil.getPage(request);
		DetachedCriteria criteria = HttpUtil.convertCriteria(request,ClientCate.class);
		List list= baseDomain.queryByCriteria(criteria, page);
		model.put("list", list);
		model.put("page", page);
		return new ModelAndView(this.getListPage(),model);
	}
	public ModelAndView catelist(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Map
     
     
      
       model=HttpUtil.convertModel(request);
		String clientCateId=HttpUtil.getString(request, "clientCateId", "");
		ClientCate clientCate=(ClientCate)baseDomain.query(ClientCate.class, clientCateId);
		Page page=HttpUtil.getPage(request);
		DetachedCriteria criteria = HttpUtil.convertCriteria(request,Client.class);
		if(clientCate!=null){
			criteria.add(Restrictions.eq("clientCateId", clientCateId));
		}
		List list= baseDomain.queryByCriteria(criteria, page);
		model.put("list", list);
		model.put("page", page);
		model.put("clientCate", clientCate);
		return new ModelAndView(this.getCustomPage("catelist"),model);
	}
}

     
     
    
    
 
 
配置信息

     
     
 
     
      
        
      
       
        
      
       
    
     
      



     
     
		
      
      
		
      
      
	
     
     

     
     
          
      
      
			
       
       
				
        
        
			
		
      
      

     
     
 
方法二.
java 代码
 
public class WebController implements BaseInterface{

	@Override
	public ModelAndView list(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Map
     
     
      
       model=HttpUtil.convertModel(request);
		Page page=HttpUtil.getPage(request);
		DetachedCriteria criteria = HttpUtil.convertCriteria(request,ClientCate.class);
		List list= baseDomain.queryByCriteria(criteria, page);
		model.put("list", list);
		model.put("page", page);
		return new ModelAndView(this.getListPage(),model);
	}
	public ModelAndView catelist(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Map
      
      
       
        model=HttpUtil.convertModel(request);
		String clientCateId=HttpUtil.getString(request, "clientCateId", "");
		ClientCate clientCate=(ClientCate)baseDomain.query(ClientCate.class, clientCateId);
		Page page=HttpUtil.getPage(request);
		DetachedCriteria criteria = HttpUtil.convertCriteria(request,Client.class);
		if(clientCate!=null){
			criteria.add(Restrictions.eq("clientCateId", clientCateId));
		}
		List list= baseDomain.queryByCriteria(criteria, page);
		model.put("list", list);
		model.put("page", page);
		model.put("clientCate", clientCate);
		return new ModelAndView(this.getCustomPage("catelist"),model);
	}
}

      
      
     
     
 
配置信息:

     
     
 
     
      
        
      
       
        
      
       
    
     
      



     
     
		
      
      
		
      
      
	
     
     

 
     
               
        
      
                
            
       
                 
        
      
                
        
      
                
            
       
                 
        
      
                
    
     
      


     
     
          
      
      
			
       
       
				
        
        
			
		
      
      

     
     
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值