4、商品修改功能开发(springmvc笔记)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4、商品修改功能开发(springmvc笔记)相关的知识,希望对你有一定的参考价值。
参考技术A主要内容:
这里我们还是使用上次整合的工程。
操作流程:
根据上面的需求我们可以知道, mapper 中此处需要完成两个功能:
根据持久层 mapper 的相关业务需求,这里我们就可以知道业务层的功能需求
ItemsServiceI.java
ItemsServiceImpl.java
说明: 这里我们的方法还不是很完善,比如这里就没有给出查询条件,在后面一步步完善。
ItemsController.java
说明: 对于商品列表展示页面在整合工程中已经给出,这里我们给出修改页面:
WEB-INF/jsp/items/editItems.jsp
下面我们就可以部署工程,使用地址 http://localhost:8080/springmvc-mybatis01/queryItems.action 进行访问,此时点击页面中的修改页面,就会找到 editItems.action ,我们可以看到修改页面中回显了我们选择要修改商品的信息。当然这里还有一个成功页面 WEB-INF/jsp/items/success.jsp 。
普通 url 地址映射在之前讲过,比如:
所谓窄化请求映射就是当控制器中方法很多,映射很多的时候,我们为了便于管理,一般会将这些 url 地址进行分类管理。这里我们对控制器进行改造,窄化请求映射。
进行窄化请求映射,于是最终的 url 就是跟路径+子路径,比如 /items/queryItems.action 。我们在此处改动之后需要对jsp页面进行改进,在 itemsList.jsp 中
在 editItems.jsp
其中被注释掉的是之前的方式。
一般常用请求方式有 GET 和 POST 两种,但是有时候我们需要规定必须使用哪种方式,在 ItemsController.java :
这里我们限制请求方式必须是 GET 或者 POST ,当然如果这里我们限制为 POST ,那么默认的 GET 提交方式就提交不成功。
这个在之前我们已经讲过,这里不再说明。
说明: 可以看到我们首先将数据存入到 Model 中,然后返回逻辑视图地址。而真正的视图( jsp )还需要加上前缀和后缀。
说明: 一定注意在 Controller 方法中重定向时不需要加根路径。
说明: 通过此种方式进行页面转发, url 地址栏不变, request 可以共享。当然我们说 request 可以共享,那么我们可以给方法传递一个参数 HttpServletRequest :
于是我们在其跳转的方法中可以接收 request :
这样就实现了 request 的共享。我们可以在此方法中进行测试。
在 Controller 方法行参上可以定义 request 和 response ,使用 request 或者 response 指定响应结果:
直接在 Controller 方法的形参上定义下面类型的对象,就可以使用这些对象。在参数绑定过程中,如果遇到下边的类型直接进行绑定(自动进行的)。
说明: 这里我们绑定了一个简单类型( Integer ),如果这个参数名称为 id ,也就是和 request 传入参数名称一致,那么我们不需要使用注解。但是这里我们参数名称是 items_id ,也就是不一致,那么我们需要使用上面的注解进行绑定。 @RequestParam 中 value 指定 request 传入参数名称和形参绑定, required=true 指定此参数是否必须被传入, defaultValue="" 设置默认值。可以绑定的简单类型还有 String、float、double、boolean 。
说明: 这里我们绑定 pojo 类有个前提,就是页面中 input 的名称和 Controller 的 pojo 形参中的属性名称一致,可以自动将页面中的数据绑定到 pojo 中
然后我们再次访问时发生错误,这里的问题是日期类型不能自动绑定,需要我们手动编写转换器之后绑定。对于 Controller 形参中 pojo 对象,如果属性中有日期类型,需要自定义参数绑定。将请求的日期数据串转换成日期类型,要转换的日期类型和 pojo 中日期属性的类型保持一致。需要像处理器适配器中注入自定义的参数绑定组件。在 springmvc.xml 中:
说明: 我们使用 conversion-service 属性给适配器中添加自定义转换器。
自定义转换器 CustomDateConverter.java
说明: 注意自定义转换器需要实现 Converter 接口。其中 String 是我们需要转换的类型, Date 是我们最终需要的类型。
当然这种方式较为繁琐,这里只是了解。
最后: 我们看到这里我们使用这样一个例子将 springmvc 开发中所需要用到的一些基本内容说明了,对于其他功能开发基本就类似了。
SpringMVC学习--功能完善
- 简介
在基本的项目中,无非就是基本的增删改查,前面我们已经实现了一个简单的查询功能,现在来实现增删改功能,来了解实际开发中的运用,以修改功能为例,因为修改功能基本覆盖了增加和删除的运用。
前面我们实现了查询列表的功能,现在根据查询列表进入到商品详情,然后修改商品信息然后再返回商品列表页面。
- 修改功能
1、开发Mapper:根据id查询商品信息、根据id更新Items表的数据
这个可以使用逆向工程实现,也可以自己实现。
2、开发service
service接口:
1 // 根据id查询商品信息 2 public ItemsCustom findItemsById(Integer id) throws Exception; 3 // 修改商品信息 4 public void updateItems(Integer id, ItemsCustom itemsCustom) 5 throws Exception;
service实现类:
1 public ItemsCustom findItemsById(Integer id) throws Exception { 2 3 Items items = itemsMapper.selectByPrimaryKey(id); 4 // 中间对商品信息进行业务处理 5 // .... 6 // 返回ItemsCustom 7 ItemsCustom itemsCustom = new ItemsCustom(); 8 // 将items的属性值拷贝到itemsCustom 9 BeanUtils.copyProperties(items, itemsCustom); 10 11 return itemsCustom; 12 13 } 14 15 @Override 16 public void updateItems(Integer id, ItemsCustom itemsCustom) 17 throws Exception { 18 // 添加业务校验,通常在service接口对关键参数进行校验 19 // 校验 id是否为空,如果为空抛出异常 20 21 // 更新商品信息使用updateByPrimaryKeyWithBLOBs根据id更新items表中所有字段,包括 大文本类型字段 22 // updateByPrimaryKeyWithBLOBs要求必须转入id 23 itemsCustom.setId(id); 24 itemsMapper.updateByPrimaryKeyWithBLOBs(itemsCustom); 25 }
3、开发Controller
1 @Controller 2 @RequestMapping("/items") 3 public class ItemController { 4 @Autowired 5 private ItemsService itemsService; 6 @RequestMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET}) 7 //@RequestParam里边指定request传入参数名称和形参进行绑定。 8 //通过required属性指定参数是否必须要传入 9 //通过defaultValue可以设置默认值,如果id参数没有传入,将默认值和形参绑定。 10 public String editItems(Model model,@RequestParam(value="id",required=true) Integer items_id)throws Exception { 11 //调用service根据商品id查询商品信息 12 ItemsCustom itemsCustom = itemsService.findItemsById(items_id); 13 //通过形参中的model将model数据传到页面 14 //相当于modelAndView.addObject方法 15 model.addAttribute("itemsCustom", itemsCustom); 16 17 return "items/editItems"; 18 } 19 // 商品信息修改提交 20 @RequestMapping("/editItemsSubmit") 21 public String editItemsSubmit(HttpServletRequest request, Integer id, 22 ItemsCustom itemsCustom) throws Exception { 23 // 调用service更新商品信息,页面需要将商品信息传到此方法 24 itemsService.updateItems(id, itemsCustom); 25 // 重定向到商品查询列表 26 //return "redirect:queryItems.action"; 27 // 页面转发 28 return "forward:queryItems.action"; 29 //return "success"; 30 } 31 }
从这两个方法中有很多可以总结的:
1、在类前面加@RequestMapping("/items"),可以窄化请求,是请求根据类的url和方法的url拼接,这样可以按控制器进行分类来实现不同的调用。
2、在方法前面加@RequestMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET}),这样可以对方法的访问进行限制,只要get和post的方法可以访问。
3、Controller的方法的返回类型有多种,可以是ModelAndView、void或string。
(1)、返回ModelAndView
需要方法结束时,定义ModelAndView,将model和view分别进行设置。
(2)、返回string
表示返回逻辑视图名:真正视图(jsp路径)=前缀+逻辑视图名+后缀
redirect重定向:"redirect:queryItems.action"
forward页面转发:"forward:queryItems.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串");
以上是关于4、商品修改功能开发(springmvc笔记)的主要内容,如果未能解决你的问题,请参考以下文章
springmvc-高级参数绑定-映射-异常-json数据交互-拦截器