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,将modelview分别进行设置。

    (2)、返回string

        表示返回逻辑视图名:真正视图(jsp路径)=前缀+逻辑视图名+后缀

        redirect重定向:"redirect:queryItems.action"

        forward页面转发:"forward:queryItems.action"

     (3)、返回void:

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

        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数据交互-拦截器

springmvc学习笔记(13)-springmvc注解开发之集合类型参数绑定

淘淘商城第三天笔记

学习模仿天猫商城毕业设计SSM商城系统笔记

Python web 开发购物车修改商品数量功能实现

阶段一-02.分类,推荐,搜索,评价,购物车开发-第4章 商品搜索功能开发-4-2 商品搜索 - 实现商品搜索功能