`
acf
  • 浏览: 35096 次
文章分类
社区版块
存档分类
最新评论

SpringMVC 中如何将MultiActionController和CommandController结和使用

阅读更多
在利用Spring MVC 时,或许会想到把MultiActionController和CommandController结全起来全用,使你的Controller功能更加强大。现在就有这样一个例子,能使你的一个Controller既可以处理多个URL请求,又可以接受form表单
Controller源码如下:
java 代码

java 代码
 
  1. package com.betop.probe.controller.study;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. import org.springframework.validation.BindException;  
  10. import org.springframework.web.bind.ServletRequestDataBinder;  
  11. import org.springframework.web.servlet.ModelAndView;  
  12. import org.springframework.web.servlet.mvc.AbstractCommandController;  
  13.   
  14. import com.betop.probe.domain.MasterUser;  
  15.   
  16. public class UserMultiActionController3 extends AbstractCommandController{  
  17.       
  18.     public UserMultiActionController3(){  
  19.         this.setCommandClass(MasterUser.class);  
  20.     }  
  21.       
  22.     public ModelAndView demo1(HttpServletRequest req, HttpServletResponse resp)throws Exception {  
  23.           
  24.         Map<String, Object> model = new HashMap<String, Object>();  
  25.         model.put("message""这是MultiActioncontroller的第三种配置!");  
  26.         return new ModelAndView("study/MultiActionControllerView3.vm", model);  
  27.     }  
  28.       
  29.     public ModelAndView demo2(HttpServletRequest req, HttpServletResponse resp)throws Exception{  
  30.           
  31.           
  32.         MasterUser user = getCommand(req, resp);  
  33.           
  34.         Map<String, Object> model = new HashMap<String, Object>();  
  35.           
  36.         model.put("user", user);  
  37.           
  38.         return new ModelAndView("study/result.vm", model);  
  39.         //return super.handleRequest(req, resp);  
  40.     }  
  41.       
  42.     private MasterUser getCommand(HttpServletRequest req, HttpServletResponse resp) throws Exception{  
  43.           
  44.         MasterUser command = (MasterUser)getCommand(req);  
  45.         ServletRequestDataBinder binder = bindAndValidate(req, command);  
  46.         BindException errors = new BindException(binder.getBindingResult());  
  47.           
  48.         return command;  
  49.     }  
  50.   
  51.     @Override  
  52.     protected ModelAndView handle(HttpServletRequest request,  
  53.             HttpServletResponse response, Object command, BindException errors)  
  54.             throws Exception {  
  55.         // TODO Auto-generated method stub  
  56.         return null;  
  57.     }  
  58.   
  59. }  

配置如下:
xml 代码
 
  1.        <bean id="testMulti3" class="com.betop.probe.controller.study.UserMultiActionController3"/>  
  2.   
  3. <bean id="proxyController" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">  
  4.     <property name="methodNameResolver">  
  5.         <ref bean="paraMethodResolver"/>  
  6.     </property>  
  7.   
  8.     <property name="delegate">  
  9.         <ref bean="testMulti3"/>  
  10.     </property>  
  11. </bean>  
  12.   
  13. <bean id="SimpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  14.        <property name="mappings">  
  15.            <props>  
  16.         <prop key="/test/*.htm">proxyController</prop>  
  17.            </props>  
  18.        </property>  
  19.    </bean>  

这样你就可以通过URL:http://host/project/test/demo2.htm来提交你的表单
URL:http://host/project/test/demo1.htm来访问另外一个方法。
上面的做法是通过getCommand方法,借用了父类里的一些功能把请求参数转换为你想要的对象。

当然,你也可以不去写getCommand方法,对于方法demo2也可以写成如下:
java 代码
  1. public ModelAndView demo2(HttpServletRequest req, HttpServletResponse resp)throws Exception{
  2.      return super.handleRequest(req, resp);
  3. }
这样你就要把demo2中功能复制到handle方法中。
分享到:
评论
2 楼 稻香麦甜 2008-10-14  
干嘛不和SimpleFormController 结合?
1 楼 acf 2007-11-23  
配置中少了一部分,这里加上:
<bean id="paraMethodResolver"  class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName">
      <value>method</value>
</property>
</bean>

相关推荐

    SpringMVC - MultiActionController

    在这个最简化教程中,我们将深入理解如何使用MultiActionController以及其在实际应用中的优缺点。 首先,了解SpringMVC的基本架构是必要的。它主要由DispatcherServlet、Controllers、Models、Views和Handlers等...

    SpringMVC:生成Excel和PDF

    在IT行业中,SpringMVC是一个广泛使用的Web应用框架,它为开发者提供了强大的MVC(Model-View-Controller)设计模式支持。这篇博文“SpringMVC:生成Excel和PDF”主要探讨了如何在SpringMVC应用中创建并导出两种常见...

    使用SpringMVC做的小项目

    在“使用SpringMVC做的小项目”中,我们可以深入探讨SpringMVC的关键特性和它如何与Spring和Hibernate集成,以实现高效的数据持久化。 首先,SpringMVC的核心是DispatcherServlet,它作为请求的前端控制器,接收...

    springMVC解决中文乱码

    例如,我们可以在 Controller 中使用 `@RequestMapping` 注解,并添加 `produces` 属性来指定字符编码: ```java @RequestMapping(value = "/hello", produces = "text/html;charset=UTF-8") public String hello()...

    SpringMVC完整使用教程

    你可以直接在方法签名中使用参数,如 `String name` 来获取请求参数;或者使用 `@RequestParam` 注解指定参数名。对于复杂的数据结构,可以使用 POJO 类绑定请求参数值,SpringMVC 会自动将请求参数填充到对象中。...

    mybatis 和springmvc整合

    例如,可以创建一个`UserMapper`接口,包含`selectUser`, `insertUser`, `updateUser`, `deleteUser`等方法,然后在Controller中使用这些方法来处理HTTP请求。 最后,测试整合后的应用。创建一个简单的HTML表单,...

    springMVC使用文档

    在 SpringMVC 中,模型通常由 POJO (Plain Old Java Object) 实现,并结合 Service 层和 DAO 层进行数据操作。 - **View (视图)**:负责展示数据给用户。在 SpringMVC 中,视图通常采用 JSP (Java Server Pages) ...

    java springmvc

    下面将详细讨论SpringMVC的关键组件和它们在实际开发中的应用。 1. **DispatcherServlet**: SpringMVC的核心组件,作为前端控制器,负责接收HTTP请求,并根据请求映射信息分发到相应的处理器。 2. **Model**: 在...

    springmvc和mybatis整合

    在SpringMVC中,我们可以使用Jackson库处理JSON数据,通过`@ResponseBody`注解将Controller方法的返回值转换为JSON格式发送给客户端。至于Validator,Spring提供了Validator接口和ValidationUtils工具类,用于校验...

    开源框架面试题系列:Spring+SpringMVC+MyBatis.zip

    9. **SpringMVC中的拦截器**:定义、配置和使用Interceptor,以及其在Web应用中的作用。 理解并熟练掌握Spring、SpringMVC和MyBatis这三大框架,对于Java开发者来说至关重要,它们不仅能够提高开发效率,还能帮助...

    springMVC练手代码

    9. **数据绑定**:SpringMVC自动将请求参数绑定到控制器方法的参数,也可以自动将模型数据填充到表单中。 10. **异常处理**:通过`@ExceptionHandler`注解,可以在控制器中统一处理异常,或者在配置文件中全局定义...

    SpringMVC 中xml文件的读取与显示

    这篇内容将深入探讨SpringMVC中XML文件的读取与显示,并结合JSP页面的实现。 首先,我们需要理解SpringMVC的配置文件结构。通常,主配置文件是`dispatcher-servlet.xml`,这个文件定义了DispatcherServlet的行为,...

    SpringMVC所有jar包和配置文件

    SpringMVC所有jar包和配置文件可以快速配置springmvc项目

    SpringMVC留言板_.zip

    SpringMVC留言板是一个基于Java的Web应用程序,使用了SpringMVC框架来实现用户交互和数据管理。这个实验项目旨在帮助开发者了解如何在实际环境中运用SpringMVC,掌握其核心概念和工作流程。以下是对该实验项目的详细...

    springMVC整合xStream实现对象和xml转换

    当我们需要在SpringMVC中返回XML响应时,可以结合使用SpringMVC和XStream。 首先,让我们详细了解一下SpringMVC。SpringMVC是Spring框架的一部分,负责处理HTTP请求并生成响应。它通过DispatcherServlet作为入口点...

    使用springmvc+hibernate完成增删改查

    在本项目中,"使用springmvc+hibernate完成增删改查"意味着开发者已经配置好了SpringMVC和Hibernate的环境,能够通过这两个框架进行数据操作。数据无需创建自动生成,可能指的是使用了Hibernate的自动建表功能,或者...

    springMVC和mybatis整合,mybatis使用注解模式

    SpringMVC和MyBatis是两个非常流行的Java Web开发框架,它们在企业级应用中有着广泛的应用。SpringMVC作为Spring框架的一部分,主要用于处理HTTP请求,实现MVC(Model-View-Controller)设计模式,而MyBatis则是一个...

    SpringMVC使用JSON的Jackson的jar包

    在上面的例子中,`getUser`方法返回一个`User`对象,SpringMVC会使用Jackson将其转换为JSON格式并返回给客户端。 总结,SpringMVC中的`@ResponseBody`配合Jackson库,使得开发人员可以方便地处理JSON数据。`...

    springMVC中文开发指南

    springMVC 中文开发指南,适合新手,适合初学者!

Global site tag (gtag.js) - Google Analytics