`
womendu
  • 浏览: 1481902 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Spring架构增强MultiActionController(1)

阅读更多

在使用Spring提供的控制器时,AbstractController和SimpleFormController是应用得最多的。AbstractController是最基本的Controller,可以给予用户最大的灵活性。


SimpleFormController则用于典型的表单编辑和提交。在一个需要增,删,改,查的需求中,增加和修改扩展SimpleFormController完成,删除和查询则扩展AbstractController完成。


但是像上面那样完成某一业务对象的增,删,改,查,都属于一类相关的业务。把一类相关的操作分布到不同的类去完成,违返“高内聚”的设计原则。这样四个业务操作需要四个类来完成,造成太多的类文件,难以维护和配置。


所以Spring借鉴Struts的DispatchAction提供了类似功能的MultiActionController。可以实现不同的请求路径对应MultiActionController中的不同方法,这样就可以把相关的操作都在一个类的相关方法中完成。这样使得这个类具有“高内聚”,也利于系统的维护,还避免了重复代码。增加和修改操作的数据验证逻辑是很相似的,使用MultiActionController后就可以让增加和修改操作共用一段数据验证逻辑代码。


1. 使用MultiActionController


MultiActionController会使不同的请求映射为不同方法,这里是一个实现用户信息增删改查的例子:


1.1 SampleMultiMethodController实现






public class SampleMultiMethodController extends MultiActionController...{
// 用户信息列表view
private static final String userInfoListView = "ehld.sample.getuserinfolist";
//用户信息编辑view
private static final String userFormView = "ehld.sample.userForm";
//提交成功后显示的view
private static final String userSuccessView ="

redirect:ehld.sample.getuserinfolist.do";
// 用户信息列表key值
private static final String userInfoListKey = "userInfoList";
// userid
private final String userIdParam = "id";
// 定义业务对象
private SampleAction sampleAction;
public SampleAction getSampleAction() ...{
return sampleAction;
}
public void setSampleAction(SampleAction sampleAction) ...{
this.sampleAction = sampleAction;
}

/**//**
* 功能:获得所有的用户信息

*/
public ModelAndView listUser(HttpServletRequest request,
HttpServletResponse response) throws Exception ...{
List userInfoList = this.sampleAction.getUserInfoList();
ModelAndView mav = new ModelAndView(userInfoListView);
mav.addObject(this.userInfoListKey,userInfoList);
return mav;
}

/**//**
* 功能:编辑用户信息

*/
public ModelAndView edtiUser(HttpServletRequest request,
HttpServletResponse response) throws Exception ...{
String uid = RequestUtils.getStringParameter(request, userIdParam);
UserInfoDTO userInfo = null;
if (!"".equals(uid)) ...{
userInfo = this.sampleAction.getUserInfo(uid);
}
if (userInfo == null) ...{
userInfo = new UserInfoDTO();
}
ModelAndView mav = new ModelAndView(this.userFormView, this
.getCommandName(null), userInfo);
return mav;
}
/**//**
* 功能:保存修改或新增的用户信息

*检查从页面bind的对象,如果userId或userName为空则返回原来的form页面;

否则进行保存用户信息操作,返回
*成功页面
*/
public ModelAndView saveUser(HttpServletRequest request,
HttpServletResponse response, UserInfoDTO command) throws

Exception ...{
UserInfoDTO user = (UserInfoDTO) command;
ServletRequestDataBinder binder = new ServletRequestDataBinder(command,
getCommandName(command));
BindException errors = binder.getErrors();
ModelAndView mav = null;
if (user.getUserID() == null || "".equals(user.getUserID())) ...{
errors.rejectValue("userID", "userIdNull", "用户id不能为空");
}

if (user.getUserName() == null || "".equals(user.getUserName())) ...{
errors.reject("userNameNull", "用户名不能为空");
}
if (errors.hasErrors()) ...{
mav = new ModelAndView(this.userFormView, errors.getModel());
} else ...{

this.sampleAction.saveUserInfo(user);// 保存用户信息
mav = new ModelAndView(this.userSuccessView);
}
return mav;
}
/**//**
* 功能:删除用户信息

*/
public ModelAndView deleteUser(HttpServletRequest request,
HttpServletResponse response) throws Exception ...{
String uid = RequestUtils.getStringParameter(request, userIdParam);
UserInfoDTO user = new UserInfoDTO();
user.setUserID(uid);
this.sampleAction.deleteUserInfo(user);
ModelAndView mav = new ModelAndView(this.userSuccessView);
return mav;
}
}


1.2 web-context配置






<!-- 把sampleMultiMethodController所有的请求映射到SimpleUrlHandlerMapping -->
<bean id="handlerMapping">class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"&gt;<br><property name="defaultHandler" ref=" sampleMultiMethodController "></property><br></bean>

<!-- 集增,删,改,查操作到一个类的controller -->
<bean id="sampleMultiMethodController">class="com.prs.application.ehld.sample.web.controller.SampleMultiMethodController"&gt;<br><property name="methodNameResolver"><br><bean>class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver"&gt;<br><property name="mappings"><br><props><br><prop key="/ehld.sample.getuserinfolist.do">listUser</prop><br><prop key="/ehld.sample.edituserinfo.do">edtiUser</prop><br><prop key="/ehld.sample.saveuserinfo.do">saveUser</prop><br></props><br></property><br></bean><br></property><br><property name="sampleAction">ref="com.prs.application.ehld.sample.biz.action.sampleAction"&gt;</property><br></bean>

分享到:
评论

相关推荐

    Spring MVC MultiActionController---多动作控制器

    Spring MVC MultiActionController---多动作控制器 博客介绍: http://blog.csdn.net/sunshine_love/article/details/8842261 更换web.xml中web-config.xml即可尝试不同方法解析器,如有问题,请博客回复。欢迎交流...

    spring mvc MultiActionController配置方法源码

    spring mvc MultiActionController配置方法源码,可以部署到tomcat中访问

    springMVC3学习(五)--MultiActionController(源码)

    springMVC3学习(五)--MultiActionController(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25988091

    开源框架 Spring Gossip

    Spring MVC 入门 从一个最简单的 Spring Web 应用程式,来看看 Spring MVC 框架的架构与 API 组成元素。 第一个 Spring MVC 程式 WebApplicationContext Handler Mapping Handler ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.3.3. MultiActionController 13.3.4. 命令控制器 13.4. 处理器映射(handler mapping) 13.4.1. BeanNameUrlHandlerMapping 13.4.2. SimpleUrlHandlerMapping 13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与...

    SpringMVC - MultiActionController

    SpringMVCMultiActionController的使用最简化教程

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 模型简介 10.7.2 模型封装 10.8 小结 第十一章 ...

    Spring 2.0 开发参考手册

    13.3.3. MultiActionController 13.3.4. 命令控制器 13.4. 处理器映射(handler mapping) 13.4.1. BeanNameUrlHandlerMapping 13.4.2. SimpleUrlHandlerMapping 13.4.3. 拦截器(HandlerInterceptor) 13.5. ...

    Spring MVC框架 多动作控制器详解 spring mvc 2.5

    本代码使用了Spring MVC框架(spring2.5架包) 演示了(Controller接口的试用方法)和 MultiActionController多动作控制器 数据库连接试用Spring JDBC 并且着重介绍了MultiActionController多动作控制器的两种方法名...

    spring chm文档

    13.3.3. MultiActionController 13.3.4. 命令控制器 13.4. 处理器映射(handler mapping) 13.4.1. BeanNameUrlHandlerMapping 13.4.2. SimpleUrlHandlerMapping 13.4.3. 拦截器(HandlerInterceptor) 13.5. ...

    Spring中文帮助文档

    2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. ...

    Spring API

    2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. ...

    spring mvc_03

    MultiActionController

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 模型简介 10.7.2 模型封装 10.8 小结 第十一章 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 模型简介 10.7.2 模型封装 10.8 小结 第十一章 ...

    spring 2.0表单绑定实例

    自己写的spring表单绑定的小例子,分别使用SimpleFormController,MultiActionController,spring的form tag和validator。 还在MultiActionController里面实现了表单的绑定

    SPRING API 2.0.CHM

    Hessian1SkeletonInvoker Hessian2SkeletonInvoker HessianClientInterceptor HessianProxyFactoryBean HessianServiceExporter HessianSkeletonInvoker HeuristicCompletionException HibernateAccessor ...

    spring mvc_04

    MultiActionController静态访问

    springmvcdemo

    下载之后您只需要1.根据实体类创建数据库 2.jdbc.property填写正确 3.项目加载 运行 这里你将学习到: 前台: 公共类库 Juqery 公共组件 表格:jqueryeasyui datagrid 代码树:ztree 后台需要用的技术 1. 解析...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 模型简介 10.7.2 模型封装 10.8 小结 第十一章 ...

Global site tag (gtag.js) - Google Analytics