zoukankan      html  css  js  c++  java
  • springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    标签: springmvc



    本文以商品改动为例,记录springmvc的注解开发。包含mapper,service,controller,@RequestMapping,controller方法的返回值等

    需求

    操作流程:

    • 1.进入商品查询列表页面
    • 2.点击改动,进入商品改动页面,页面中显示了要改动的商品。要改动的商品从数据库查询,依据商品id(主键)查询商品信息
    • 3.在商品改动页面,改动商品信息,改动后,点击提交

    开发mapper

    mapper:

    • 依据id查询商品信息
    • 依据id更新Items表的数据

    不用开发了,使用逆向project生成的代码。

    开发service

    com.iot.learnssm.firstssm.service.ItemsService中加入两个接口

      //依据id查询商品信息
        /**
         *
         * <p>Title: findItemsById</p>
         * <p>Description: </p>
         * @param id 查询商品的id
         * @return
         * @throws Exception
         */
         ItemsCustom findItemsById(Integer id) throws Exception;
    
        //改动商品信息
        /**
         *
         * <p>Title: updateItems</p>
         * <p>Description: </p>
         * @param id 改动商品的id
         * @param itemsCustom 改动的商品信息
         * @throws Exception
         */
         void updateItems(Integer id,ItemsCustom itemsCustom) throws Exception;
    

    com.iot.learnssm.firstssm.service.impl.ItemsServiceImpl中实现接口,添加itemsMapper属性

    @Autowired
    private ItemsMapper itemsMapper;
    
    public ItemsCustom findItemsById(Integer id) throws Exception {
        Items items = itemsMapper.selectByPrimaryKey(id);
        //中间对商品信息进行业务处理
        //....
        //返回ItemsCustom
        ItemsCustom itemsCustom = new ItemsCustom();
        //将items的属性值复制到itemsCustom
        BeanUtils.copyProperties(items, itemsCustom);
    
        return itemsCustom;
    }
    
    public void updateItems(Integer id, ItemsCustom itemsCustom) throws Exception {
        //加入业务校验,通常在service接口对关键參数进行校验
        //校验 id是否为空,假设为空抛出异常
    
        //更新商品信息使用updateByPrimaryKeyWithBLOBs依据id更新items表中全部字段。包含 大文本类型字段
        //updateByPrimaryKeyWithBLOBs要求必须转入id
        itemsCustom.setId(id);
        itemsMapper.updateByPrimaryKeyWithBLOBs(itemsCustom);
    }

    开发controller

    方法:

    • 商品信息改动页面显示
    • 商品信息改动提交
    //使用@Controller来标识它是一个控制器
    @Controller
    //为了对url进行分类管理 ,能够在这里定义根路径,终于訪问url是根路径+子路径
    //比方:商品列表:/items/queryItems.action
    //@RequestMapping("/items")
    public class ItemsController {
    
        @Autowired
        private ItemsService itemsService;
    
        //商品查询列表
        @RequestMapping("/queryItems")
        //实现 对queryItems方法和url进行映射。一个方法相应一个url
        //一般建议将url和方法写成一样
        public ModelAndView queryItems() throws Exception{
            //调用service查找数据库,查询商品列表
            List<ItemsCustom> itemsList = itemsService.findItemsList(null);
    
            //返回ModelAndView
            ModelAndView modelAndView = new ModelAndView();
            //相当于request的setAttribute方法,在jsp页面中通过itemsList取数据
            modelAndView.addObject("itemsList",itemsList);
    
            //指定视图
            //下边的路径,假设在视图解析器中配置jsp的路径前缀和后缀,改动为items/itemsList
            //modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
            //下边的路径配置就能够不在程序中指定jsp路径的前缀和后缀
            modelAndView.setViewName("items/itemsList");
    
            return modelAndView;
        }
    
    
        //商品信息改动页面显示
        @RequestMapping("/editItems")
        //限制http请求方法,能够post和get
        //@RequestMapping(value="/editItems",method={RequestMethod.POST, RequestMethod.GET})
        public ModelAndView editItems()throws Exception {
    
            //调用service依据商品id查询商品信息
            ItemsCustom itemsCustom = itemsService.findItemsById(1);
    
            // 返回ModelAndView
            ModelAndView modelAndView = new ModelAndView();
    
            //将商品信息放到model
            modelAndView.addObject("itemsCustom", itemsCustom);
    
            //商品改动页面
            modelAndView.setViewName("items/editItems");
    
            return modelAndView;
        }
    
        //商品信息改动提交
        @RequestMapping("/editItemsSubmit")
        public ModelAndView editItemsSubmit(HttpServletRequest request, Integer id, ItemsCustom itemsCustom)throws Exception {
    
            //调用service更新商品信息,页面须要将商品信息传到此方法
            itemsService.updateItems(id, itemsCustom);
    
            //返回ModelAndView
            ModelAndView modelAndView = new ModelAndView();
            //返回一个成功页面
            modelAndView.setViewName("success");
            return modelAndView;
        }
    
    }
    

    @RequestMapping

    • url映射

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

    • 窄化请求映射
    //使用@Controller来标识它是一个控制器
    @Controller
    //为了对url进行分类管理 。能够在这里定义根路径,终于訪问url是根路径+子路径
    //比方:商品列表:/items/queryItems.action
    @RequestMapping("/items")
    public class ItemsController {
    • 限制http请求方法

    出于安全性考虑。对http的链接进行方法限制。

    //商品信息改动页面显示
        //@RequestMapping("/editItems")
        //限制http请求方法。能够post和get
        @RequestMapping(value="/editItems",method={RequestMethod.POST, RequestMethod.GET})
        public ModelAndView editItems()throws Exception {

    假设限制请求为post方法。进行get请求,即将上面代码的注解改为@RequestMapping(value="/editItems",method={RequestMethod.POST})

    报错,状态码405:

    GET拒绝

    controller方法的返回值

    • 返回ModelAndView

    须要方法结束时,定义ModelAndView,将model和view分别进行设置。

    • 返回string

    假设controller方法返回string

    1.表示返回逻辑视图名。

    真正视图(jsp路径)=前缀+逻辑视图名+后缀

    @RequestMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET})
    //@RequestParam里边指定request传入參数名称和形參进行绑定。

    //通过required属性指定參数是否必须要传入 //通过defaultValue能够设置默认值。假设id參数没有传入。将默认值和形參绑定。 //public String editItems(Model model, @RequestParam(value="id",required=true) Integer items_id)throws Exception { public String editItems(Model model)throws Exception { //调用service依据商品id查询商品信息 ItemsCustom itemsCustom = itemsService.findItemsById(1); //通过形參中的model将model数据传到页面 //相当于modelAndView.addObject方法 model.addAttribute("itemsCustom", itemsCustom); return "items/editItems"; }

    2.redirect重定向

    商品改动提交后,重定向到商品查询列表。

    redirect重定向特点:浏览器地址栏中的url会变化。改动提交的request数据无法传到重定向的地址。由于重定向后又一次进行request(request无法共享)

    //重定向到商品查询列表
    //return "redirect:queryItems.action";

    3.forward页面转发

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

    //页面转发
    return "forward:queryItems.action";
    • 返回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串");

    作者@brianway很多其它文章:个人站点 | CSDN | oschina

  • 相关阅读:
    剑指Offer-30.连续子数组的最大和(C++/Java)
    剑指Offer-29.最小的K个数(C++/Java)
    UVA 1616 Caravan Robbers 商队抢劫者(二分)
    UVA 10570 Meeting with Aliens 外星人聚会
    UVA 11093 Just Finish it up 环形跑道 (贪心)
    UVA 12673 Erratic Expansion 奇怪的气球膨胀 (递推)
    UVA 10954 Add All 全部相加 (Huffman编码)
    UVA 714 Copying Books 抄书 (二分)
    UVALive 3523 Knights of the Round Table 圆桌骑士 (无向图点双连通分量)
    codeforecs Gym 100286B Blind Walk
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7110903.html
Copyright © 2011-2022 走看看