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串");

时间: 2024-10-15 11:18:53

SpringMVC学习--功能完善的相关文章

SpringMVC学习笔记(二): 日常使用功能

前提: 1.web.xml 和spring-mvc核心配置如:SpringMVC学习笔记(一): 基础知识中注解实现. 2.类的@RequestMapping(value="/annotationController") 3.spring-mvc 推荐使用注解实现. 一.数据的接收 (一)URL参数数据的接收 1.使用 HttpServletRequest 获取参数 <span style="font-size:18px;"><span style

springMVC+Java验证码完善注册功能

这篇文章简单的写了一个java验证码,为之前写过的springMVC注册功能加上验证码,验证码的作用就不多说了,防止机器人程序恶意注册什么的... 基本的注册功能的实现请查看之前的文章Maven搭建springMVC+spring+hibernate实现用户注册 其中,我修改了该注册程序的部分代码,其中User.java,加上了password和code的属性,同时将password持久到数据库,code属性使用@transient注解使其不被持久到数据库. User.java 中加上这两个属性

SpringMVC学习系列(1) 之 初识SpringMVC

1.前言: 与SpringMVC的结识源于个人之前想做一个微信公众账号的管理平台玩玩,既然要做就需要考虑平台的选择问题.由于我的朋友只有一台运行了Linux系统的虚拟主机,且上面还运行有他自己的一些论坛.找不到windows虚拟主机,且肯定不能换朋友主机的系统.刚开始时打算用mono把之前做的.Net MVC项目搭的框架运行一下看看能不能用,发现根本跑不起来(项目用了Spring.NET当时mono和Spring.NET还不兼容,Sping.NET论坛说是由于mono的反射实现机制的问题.好消息

SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现

到这里已经写到第12篇了,前11篇基本上把Spring MVC主要的内容都讲了,现在就直接上一个项目吧,希望能对有需要的朋友有一些帮助. 一.首先看一下项目结构: InfrastructureProjects:是抽取出的基础项目,主要封装了一些通用的操作. SpringMVC3Demo:就是管理系统所在的项目. WeiXinAPI:是之前做微信管理平台测试时封装一些操作,如果不需要把该项目移除即可. 注:项目的前端UI框架用的是国外的一个基于Bootstrap框架的开发的Demo,如不需要替换为

SpringMVC学习系列(11) 之 表单标签

本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松. 一.首先我们先做一个简单了例子来对Spring MVC表单表单标签的使用有一个大致的印象,然后再结合例子对各个标签介绍一下如何使用. 1.首先,在com.demo.web.models包中添加一个模型TagsModel内容如下: package com.demo.web.models; import java.util.List; import ja

springmvc学习笔记--REST API的异常处理

前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出异常, 返回的内容是500+的错误页面, 而不是json内容, 这让移动端的调用方很难处理. 本文主要讲述对于rest api, springmvc对异常的解决处理方案. 系列整理: springmvc学习笔记系列的文章目录: • idea创建springmvc项目 • 面向移动端的REST API

SpringMVC学习系列(9) 之 实现注解式权限验证

对大部分系统来说都需要权限管理来决定不同用户可以看到哪些内容,那么如何在Spring MVC中实现权限验证呢?当然我们可以继续使用servlet中的过滤器Filter来实现.但借助于Spring MVC中的action拦截器我们可以实现注解式的权限验证. 一.首先介绍一下action拦截器: HandlerInterceptor是Spring MVC为我们提供的拦截器接口,来让我们实现自己的处理逻辑,HandlerInterceptor 的内容如下: public interface Handl

SpringMVC学习系列(7) 之 格式化显示

在系列(6)中我们介绍了如何验证提交的数据的正确性,当数据验证通过后就会被我们保存起来.保存的数据会用于以后的展示,这才是保存的价值.那么在展示的时候如何按照要求显示?(比如:小数保留一定的位数,日期按指定的格式等).这就是本篇要说的内容->格式化显示. 从Spring3.X开始,Spring提供了Converter SPI类型转换和Formatter SPI字段解析/格式化服务,其中Converter SPI实现对象与对象之间的相互转换,Formatter SPI实现String与对象之间的转

SpringMVC学习(三)——SpringMVC的配置文件

读者阅读过SpringMVC学习(一)——SpringMVC介绍与入门这篇文章后,想必都会写写SpringMVC的入门小程序,在这个小程序中,SpringMVC的核心配置文件——springmvc.xml为: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=&qu