深入实践Spring Boot3.2.3 修改控制器

    xiaoxiao2024-03-28  13

    3.2.3 修改控制器

    若要实现对电影的修改及保存操作,需要先将电影的数据展示在视图界面上,然后接收界面的操作,调用数据管理模块将更改的数据保存至数据库中,如代码清单3-6所示。其中,为了简化设计,将剧照中的图片文件和电影角色名称做了预定义处理。修改数据时,由于从界面传回的电影对象中,丢失了其角色关系的数据(这是OGM的缺点),所以再次查询一次数据库,以取得一个电影的完整数据,然后再执行修改的操作。

    代码清单3-6 修改电影控制器

    @RequestMapping(value="/edit/{id}")

        public ModelAndView update(ModelMap model, @PathVariable Long id){

            Movie movie = movieRepository.findOne(id);

            String[] files = {"/images/movie/西游记.jpg","/images/movie/西游记续集.jpg"};

            String[] rolelist = {"唐僧","孙悟空","猪八戒","沙僧"};

            Iterable<Actor> actors = actorRepository.findAll();

     

            model.addAttribute("files",files);

            model.addAttribute("rolelist",rolelist);

            model.addAttribute("movie",movie);

            model.addAttribute("actors",actors);

     

            return new ModelAndView("movie/edit");

        }

     

        @RequestMapping(method = RequestMethod.POST, value="/update")

        public String update(Movie movie, HttpServletRequest request) throws Exception{

            String rolename = request.getParameter("rolename");

            String actorid = request.getParameter("actorid");

     

            Movie old = movieRepository.findOne(movie.getId());

            old.setName(movie.getName());

            old.setPhoto(movie.getPhoto());

            old.setCreateDate(movie.getCreateDate());

     

            if(!StringUtils.isEmpty(rolename) && !StringUtils.isEmpty(actorid)) {

                Actor actor = actorRepository.findOne(new Long(actorid));

                old.addRole(actor, rolename);

            }

            movieRepository.save(old);

            logger.info("修改->ID="+old.getId());

            return "1";

    }

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)