一、需求:

操作流程:

1、进入商品查询列表页面

2、点击修改,进入商品修改页面,页面中显示了要修改的商品(从数据库查询)

3、在商品修改页面,修改商品信息,修改后,点击提交

代码:

ItemsMapper.xml:--使用的是逆向工程生成的:

  1. <mapper namespace="com.cy.mapper.ItemsMapper" >
  2. <sql id="Base_Column_List" >
  3. id, name, price, pic, createtime
  4. </sql>
  5. <sql id="Blob_Column_List" >
  6. detail
  7. </sql>
  8. <resultMap id="BaseResultMap" type="com.cy.po.Items" >
  9. <id column="id" property="id" jdbcType="INTEGER" />
  10. <result column="name" property="name" jdbcType="VARCHAR" />
  11. <result column="price" property="price" jdbcType="REAL" />
  12. <result column="pic" property="pic" jdbcType="VARCHAR" />
  13. <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
  14. </resultMap>
  15. <resultMap id="ResultMapWithBLOBs" type="com.cy.po.Items" extends="BaseResultMap" >
  16. <result column="detail" property="detail" jdbcType="LONGVARCHAR" />
  17. </resultMap>
  18. <select id="selectByPrimaryKey" resultMap="ResultMapWithBLOBs" parameterType="java.lang.Integer" >
  19. select
  20. <include refid="Base_Column_List" />
  21. ,
  22. <include refid="Blob_Column_List" />
  23. from items
  24. where id = #{id,jdbcType=INTEGER}
  25. </select>
  26.  
  27. <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.cy.po.ItemsCustom" >
  28. update items
  29. set name = #{name,jdbcType=VARCHAR},
  30. price = #{price,jdbcType=REAL},
  31. pic = #{pic,jdbcType=VARCHAR},
  32. createtime = #{createtime,jdbcType=TIMESTAMP},
  33. detail = #{detail,jdbcType=LONGVARCHAR}
  34. where id = #{id,jdbcType=INTEGER}
  35. </update>
  36. </mapper>

ItemsService.java:

  1. public interface ItemsService {
  2.  
  3. public List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo) throws Exception;
  4.  
  5. //根据id查询商品信息
  6. public ItemsCustom findItemsById(Integer id) throws Exception;
  7.  
  8. //修改商品信息
  9. public void updateItems(Integer id, ItemsCustom itemsCustom) throws Exception;
  10. }

ItemsServiceImpl.java:

  1. package com.cy.service.impl;
  2.  
  3. import java.util.List;
  4.  
  5. import org.springframework.beans.BeanUtils;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7.  
  8. import com.cy.mapper.ItemsMapper;
  9. import com.cy.mapper.ItemsMapperCustom;
  10. import com.cy.po.Items;
  11. import com.cy.po.ItemsCustom;
  12. import com.cy.po.ItemsQueryVo;
  13. import com.cy.service.ItemsService;
  14.  
  15. /**
  16. * ItemsServiceImpl
  17. *
  18. */
  19. public class ItemsServiceImpl implements ItemsService {
  20.  
  21. @Autowired
  22. private ItemsMapperCustom itemsMapperCustom;
  23.  
  24. @Autowired
  25. private ItemsMapper itemsMapper;
  26.  
  27. @Override
  28. public List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo) throws Exception {
  29. //通过ItemsMapperCustom查询数据库
  30. return itemsMapperCustom.findItemsList(itemsQueryVo);
  31. }
  32.  
  33. @Override
  34. public ItemsCustom findItemsById(Integer id) throws Exception {
  35. Items items = itemsMapper.selectByPrimaryKey(id);
  36. //中间对商品信息进行业务处理
  37. //....
  38. //返回ItemsCustom
  39. ItemsCustom itemsCoustom = new ItemsCustom();
  40.  
  41. //将items的属性值拷贝到itemsCustom
  42. BeanUtils.copyProperties(items, itemsCoustom);
  43. return itemsCoustom;
  44. }
  45.  
  46. @Override
  47. public void updateItems(Integer id, ItemsCustom itemsCustom) throws Exception {
  48. //添加业务校验,通常在service接口对关键参数进行校验
  49. //校验 id是否为空,如果为空抛出异常
  50.  
  51. //更新商品信息使用updateByPrimaryKeyWithBLOBs根据id更新items表中所有字段,包括 大文本类型字段
  52. //updateByPrimaryKeyWithBLOBs要求必须转入id
  53. itemsCustom.setId(id);
  54. itemsMapper.updateByPrimaryKeyWithBLOBs(itemsCustom);
  55. }
  56.  
  57. }

ItemsController.java:

  1. @Controller
  2. @RequestMapping("/items")
  3. public class ItemsController {
  4.  
  5. @Autowired
  6. private ItemsService itemsService;
  7.  
  8. @RequestMapping("/findItems")
  9. public ModelAndView findItems() throws Exception {
  10.  
  11. List<ItemsCustom> itemsList = itemsService.findItemsList(null);
  12.  
  13. ModelAndView modelAndView = new ModelAndView();
  14. modelAndView.addObject("itemsList", itemsList);
  15. modelAndView.setViewName("items/itemsList");
  16. return modelAndView;
  17. }
  18.  
  19. //商品信息修改页面显示
  20. @RequestMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET})
  21. public String editItems(Model model, HttpServletRequest request, HttpServletResponse response) throws Exception{
  22. ItemsCustom itemsCustom = itemsService.findItemsById(1);
  23.  
  24. //通过形参中的model将model数据传到页面
  25. //相当于modelAndView.addObject方法
  26. model.addAttribute("itemsCustom", itemsCustom);
  27.  
  28. return "items/editItems";
  29. }
  30.  
  31. //商品信息修改提交
  32. @RequestMapping("/editItemsSubmit")
  33. public String editItemsSubmit(HttpServletRequest request)throws Exception {
  34.  
  35. //重定向到商品查询列表
  36. return "redirect:findItems.action";
  37. //页面转发
  38. //return "forward:findItems.action";
  39. //return "success";
  40. }
  41. }

/springMVC/WebRoot/WEB-INF/jsp/items/editItems.jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  9. <title>修改商品信息</title>
  10.  
  11. </head>
  12. <body>
  13.  
  14. <form id="itemForm" action="${pageContext.request.contextPath }/items/editItemsSubmit.action" method="post" >
  15. <input type="hidden" name="id" value="${itemsCustom.id }"/>
  16. 修改商品信息:
  17. <table width="100%" border=1>
  18. <tr>
  19. <td>商品名称</td>
  20. <td><input type="text" name="name" value="${itemsCustom.name }"/></td>
  21. </tr>
  22. <tr>
  23. <td>商品价格</td>
  24. <td><input type="text" name="price" value="${itemsCustom.price }"/></td>
  25. </tr>
  26. <tr>
  27. <td>商品生产日期</td>
  28. <td><input type="text" name="createtime" value="<fmt:formatDate value="${itemsCustom.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
  29. </tr>
  30. <%-- <tr>
  31. <td>商品图片</td>
  32. <td>
  33. <c:if test="${item.pic !=null}">
  34. <img src="/pic/${item.pic}" width=100 height=100/>
  35. <br/>
  36. </c:if>
  37. <input type="file" name="pictureFile"/>
  38. </td>
  39. </tr> --%>
  40. <tr>
  41. <td>商品简介</td>
  42. <td>
  43. <textarea rows="3" cols="30" name="detail">${itemsCustom.detail }</textarea>
  44. </td>
  45. </tr>
  46. <tr>
  47. <td colspan="2" align="center"><input type="submit" value="提交"/>
  48. </td>
  49. </tr>
  50. </table>
  51.  
  52. </form>
  53. </body>
  54.  
  55. </html>

items/itemsList.jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  9. <title>查询商品列表</title>
  10. </head>
  11. <body>
  12. <form action="${pageContext.request.contextPath }/item/findItems.action" method="post">
  13. 查询条件:
  14. <table width="100%" border=1>
  15. <tr>
  16. <td><input type="submit" value="查询"/></td>
  17. </tr>
  18. </table>
  19. 商品列表:
  20. <table width="100%" border=1>
  21. <tr>
  22. <td>商品名称</td>
  23. <td>商品价格</td>
  24. <td>生产日期</td>
  25. <td>商品描述</td>
  26. <td>操作</td>
  27. </tr>
  28. <c:forEach items="${itemsList }" var="item">
  29. <tr>
  30. <td>${item.name }</td>
  31. <td>${item.price }</td>
  32. <td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
  33. <td>${item.detail }</td>
  34. <td><a href="${pageContext.request.contextPath }/items/editItems.action?id=${item.id}">修改</a></td>
  35. </tr>
  36. </c:forEach>
  37. </table>
  38. </form>
  39. </body>
  40. </html>

二、@RequestMapping:

1)url映射

定义controller方法对应的url,进行处理器映射使用。

2)窄化请求映射

就像上面项目中的在ItemsContorller的类头上加上@RequestMapping("/items"),所有的方法的url路径就加上了/items;

3)限制http请求方法

@RequestMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET})

三、Controller方法的返回值:

1)ModalAndView

2)返回String:

1.return String表示返回逻辑视图名。真正视图(jsp路径)=前缀+逻辑视图名+后缀

形参中定义Model model;model.addAttribute("itemsCustom", itemsCustom);

2.redirect重定向

redirect重定向特点:浏览器地址栏中的url会变化。修改提交的request数据无法传到重定向的地址。因为重定向后重新进行request(request无法共享)

redirect方式相当于“response.sendRedirect()”,转发后浏览器的地址栏变为转发后的地址,因为转发即执行了一个新的request和response。
由于新发起一个request原来的参数在转发时就不能传递到下一个url,如果要传参数可以/item/queryItem.action后边加参数,如下:
/item/queryItem?...&…..
 
return "redirect:findItems.action";

3.forward页面转发

通过forward进行页面转发,浏览器地址栏url不变,request可以共享。

forward方式相当于“request.getRequestDispatcher().forward(request,response)”,转发后浏览器地址栏还是原来的地址。转发并没有执行新的request和response,而是和转发前的请求共用一个request和response。所以转发前请求的参数在转发后仍然可以读取到。

return "forward:findItems.action";

3)返回void:

在controller方法形参上可以定义request和response,使用request或response指定响应结果:

1、使用request转向页面,如下:

request.getRequestDispatcher("页面路径").forward(request, response);

2、也可以通过response页面重定向:

response.sendRedirect("url")

3、也可以通过response指定响应结果,例如响应json数据如下:

response.setCharacterEncoding("utf-8");

response.setContentType("application/json;charset=utf-8");

response.getWriter().write("json串");

springMVC学习(4)-商品修改(RequestMapping解释、controller返回值)的更多相关文章

  1. SpringMVC Controller 返回值几种类型

    SpringMVC Controller 返回值几种类型 2016年06月21日 19:31:14 为who而生 阅读数:4189 标签: Controller 返回值类型spring mvc 更多 ...

  2. WPF-学习笔记 动态修改控件Margin的值

    原文:WPF-学习笔记 动态修改控件Margin的值 举例说明:动态添加一个TextBox到Grid中,并设置它的Margin: TextBox text = new TextBox(); t_gri ...

  3. Spring MVC controller返回值类型

    SpringMVC controller返回值类型: 1 String return "user":将请求转发到user.jsp(forword) return "red ...

  4. Asp.net MVC 中Controller返回值类型ActionResult

    [Asp.net MVC中Controller返回值类型] 在mvc中所有的controller类都必须使用"Controller"后缀来命名并且对Action也有一定的要求: 必 ...

  5. SpringMVC由浅入深day01_9商品修改功能开发

    9 商品修改功能开发 9.1 需求 操作流程: 1.进入商品查询列表页面 2.点击修改,进入商品修改页面,页面中显示了要修改的商品(从数据库查询) 要修改的商品从数据库查询,根据商品id(主键)查询商 ...

  6. JAVAEE——SpringMVC第二天:高级参数绑定、@RequestMapping、方法返回值、异常处理、图片上传、Json交互、实现RESTful、拦截器

    1. 课前回顾 https://www.cnblogs.com/xieyupeng/p/9093661.html 2. 课程计划 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 ...

  7. SpringMVC学习笔记:数据的接收与返回

    SpringMVC的定义:Spring Web MVC is the original web framework built on the Servlet API and included in t ...

  8. springMVC对于Controller返回值的可选类型

    2018-01-11 对于springMVC处理方法支持支持一系列的返回方式:  (1)ModelAndView (2)Model (3)ModelMap (4)Map (5)View (6)Stri ...

  9. SpringMVC Controller 返回值的可选类型

    spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. ModelAndView @RequestMap ...

随机推荐

  1. Python Django 前后端数据交互 之 前端向后端发送数据

    Python Django 之 前端向后端发送数据

  2. 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(五)

    MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 六.部署到JBoss服务器 1. 右键单击Servers视图,然后选择New>Server,选择您安 ...

  3. JMeter传递JSON数据

    步骤: 1.添加线程组.HTTP请求默认值.察看结果树等参考<JMeter实现bugfree登录接口测试>.这里不再赘述. 2.添加HTTP请求 在Body Data中写上输入的参数.参数 ...

  4. 玩转TypeScript(2) --简单TypeScript类型

    通过TypeScript的Module和Class,TypeScript提供了相对于javaScript更加清晰的代码构造,相较于javaScript的.js满天飞的代码,用TypeScript,你可 ...

  5. 第32课 初探C++标准库

    有趣的重载: 实验: 将1左移到cout对象中. 将Test改名为Console,此时我们的本意是想让这个cout代表当前的命令行: cout代表命令行的一个实例,本意是想将1打印到命令行上. 我们在 ...

  6. Linux C single linked for any data type

    /************************************************************************** * Linux C single linked ...

  7. 【c++基础】如何获取工程项目当前路径

    工程项目当前路径 #include <direct.h> int main( ) { ]; _getcwd(buffer, ); std::cout << buffer < ...

  8. NSObject之一

    Objective-C中有两个NSObject,一个是NSObject类,另一个是NSObject协议.而其中NSObject类采用了NSObject协议.在本文中,我们主要整理一下NSObject类 ...

  9. 《DSP using MATLAB》Problem 4.12

    代码: function [As, Ac, r, v0] = invCCPP(b0, b1, a1, a2) % Determine the signal parameters Ac, As, r, ...

  10. windows dos命令

    dos命令配置环境变量: path=%path%;D:\Installed software\Professional software\Python27   (https://www.cnblogs ...