Spring架构增强MultiActionController(上)

在使用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;
  }
  /**//**
  * 功能:获得所有的用户信息<br>
  */
  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;
  }
  /**//**
  * 功能:编辑用户信息<br>
  */
  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;
  }
  /**//**
  * 功能:保存修改或新增的用户信息<br>
  *检查从页面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;
}
  /**//**
  * 功能:删除用户信息<br>
  */
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;
}
}

时间: 2024-11-03 11:29:05

Spring架构增强MultiActionController(上)的相关文章

Spring架构增强MultiActionController(下)

5.实现MultiMethodControllerUrlHandlerMapping 我们在上面讨论过了怎么实现MultiMethodControllerUrlHandlerMapping,要实现为 具体的代码,我们可以通过扩展 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping. AbstractUrlHandlerMapping扩展了 org.springframework.web.context.support

视频-Spring mvc 打开服务器上的视屏 但视屏不播放

问题描述 Spring mvc 打开服务器上的视屏 但视屏不播放 视屏文件的相对路径是upload/2.mp4 我用servlet在JSP页面上用标签在网页上是可以播放的, 但是在Spring mvc一样用JSP和在网页上却无法播放, 是不是Spring mvc要配置路径,如果是怎么配置? 解决方案 视屏监控系统视屏的简单播放 解决方案二: 解决了,果然是配置文件里路径没有配好,上传到服务器里的文件路径不在默认配置路径下面所以造成无法读取文件的问题,,大意了..

spring mvc-关于Spring mvc 向服务器上传文件报错问题

问题描述 关于Spring mvc 向服务器上传文件报错问题 Spring mvc在向服务器上传的文件的时候报错 显示系统找不到指定的路径,应该要怎么修改 解决方案 大文件上传到服务器报错的问题大文件上传到服务器报错的问题ASP.NET 上传Excel到服务器报错的问题 解决方案二: 错误粘出来看看,可能原因有很多 解决方案三: 代码是这个 @RequestMapping("/updateExcel") public String updateExcel(HttpServletRequ

c3p0+spring+hibernate在weblogic上部署,启动抛找不到类错,求大神指教

问题描述 c3p0+spring+hibernate在weblogic上部署,启动抛找不到类错,求大神指教 求大神指教,错误详细信息如下: Exception in thread "Timer-2" java.lang.NoClassDefFoundError: com/mchange/v2/util/ResourceClosedException at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTa

Spring MVC 多文件上传大小限制及异常处理

Spring MVC  多文件上传大小限制及异常处理 (包括 MaxUploadSizeExceededException 异常) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 补充如下: h

传统架构下的上云之路——来伊份上云历程分享

摘要:本文的整理自2017云栖大会-上海峰会上来伊份CIO张爱军的分享讲义,讲义主要分为三部分,首先是来伊份的介绍,来伊份,是集线下门店+线上电商+移动支付app一体化O2O全渠道休闲食品品牌和销售平台运营商,其次是上云历程,最后讲了上云之后面临的问题. 在2017云栖大会-上海峰会上,来伊份CIO张爱军做了题为<传统架构下的上云之路--来伊份上云历程分享>的分享.来伊份17年的匠心品质提供给全社会消费者安全美味健康的休闲食品坚持领鲜到底的产品理念,甄选全球20多个国家和地区.全国22个省市健

求助:weblogic服务器,strust+spring架构,使用标准标签库出现诡异问题

问题描述 weblogic服务器,strust+spring架构,出新以下错误,哪位大虾知道是为什么啊,谢谢Causedby:javax.servlet.ServletException:weblogic.servlet.jsp.CompilationException:FailedtocompileJSP/pages/usertest4sprstr/userList.jspuserList.jsp:30:23:StaticattributemustbeaStringliteral,itsill

从传统架构到云上数据,发生了哪些转变

 [51CTO.com原创稿件]在数据时代的今天,如何部署企业的大数据平台,充分挖掘数据.分析数据.发挥数据价值,成为摆在企业面前的重要难题.面对爆炸式增长的数据,传统的数据分析平台存在着诸多的问题,已经不能满足需求,借助云计算实现的云上数据分析平台,就能够非常灵活.轻松的实现企业的各种数据分析需求,并能够有效控制成本.这里,笔者就与大家简单的聊一下从传统架构到云上数据,到底发生了哪些转变. 首先,来分析一下传统数据分析平台存在的各种问题. 传统大数据分析平台面临的主要挑战 一)多租户支持.从H

299元的4K盒子教你在小米盒子1GB增强版上看4K电影

在追求超高清画质体验的今天,在智能电视及机顶盒产品上,4K技术已经成为越来越主流的发展趋势.因此为了满足发烧友的高端追求,小米全新上市了一款299元支持4K超高清分辨率的网络机顶盒,采用四核2GHz处理器.1GB RAM,也是目前市场上最具性价比的盒子.作为一款299元支持4K分辨率的盒子,通过小米盒子1GB增强版可观看到丰富的4K片源,拥有4倍于1080P的超高清播放画质,让画面的每一个细节都分毫毕现.不过看到这,可能还有很多人对于4K技术并不是十分了解,那什么是4K技术?如何在小米盒子1GB