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";
}