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

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

}

时间: 2024-09-10 00:00:28

深入实践Spring Boot3.2.3 修改控制器的相关文章

深入实践Spring Boot3.2.1 新建控制器

3.2.1 新建控制器 接收新建电影的请求,以及输入一部电影的数据后的最后提交,由新建控制器进行处理.在控制器上将执行两个操作,第一个操作将返回一个新建电影的视图,第二个操作接收界面中的输入数据,并调用数据管理模块进行保存,如代码清单3-4所示.其中,create函数将返回一个新建电影的视图,它不调用数据管理模块,save函数将需要保存的数据通过调用数据管理模块存储至数据库中,并返回一个成功标志.注意,为了简化设计,将电影剧照的图片文件做了预定义处理. 代码清单3-4 新建电影控制器 @Requ

深入实践Spring Boot3.2.2 查看控制器

3.2.2 查看控制器 查看一个电影的详细信息时,控制器首先使用请求的电影ID向数据管理模块请求数据,然后将取得的数据输出到一个显示视图上,如代码清单3-5所示. 代码清单3-5 查看电影控制器 @RequestMapping(value="/{id}")     public ModelAndView show(ModelMap model, @PathVariable Long id) {         Movie movie = movieRepository.findOne(

深入实践Spring Boot3.2.4 删除控制器

3.2.4 删除控制器 删除电影时,从界面上接收电影的ID参数,然后调用数据管理模块将电影删除,如代码清单3-7所示. 代码清单3-7 删除电影控制器 @RequestMapping(value="/delete/{id}",method = RequestMethod.GET)     public String delete(@PathVariable Long id) throws Exception{         Movie movie = movieRepository.

深入实践Spring Boot3.2.5 分页查询控制器

3.2.5 分页查询控制器 列表数据的查询使用分页的方法,按提供的查询字段参数.页码.页大小及其排序字段等参数,通过调用数据管理模块进行查询,然后返回一个分页对象Page,如代码清单3-8所示.这里的分页查询调用了3.1.3节定义的分页查询服务类. 代码清单3-8 电影分页查询控制器     @RequestMapping(value="/list") public Page<Movie> list(HttpServletRequest request) throws Ex

深入实践Spring Boot3.4.4 修改视图设计

3.4.4 修改视图设计 1.?修改对话框设计 在电影的主页中修改一部电影,首先打开一个修改电影的对话框,这个对话框的设计如代码清单3-22所示.其中通过"$.get"访问"./edit/{id}"取得数据和修改视图的HTML页面元素. 代码清单3-22 修改电影对话框js编码 function edit(id){     $.get("./edit/"+id,{ts:new Date().getTime()},function(data){  

深入实践Spring Boot3.4.1 列表视图设计

3.4.1 列表视图设计 电影的列表视图是电影视图的主页,它引用了3.3节使用Thymeleaf设计的页面框架模板layout.html,在这里主要实现对数据的分页查询请求和列表数据显示,并提供了一部电影的新建.查看.修改和删除等超链接. 1.?分页设计 电影的列表视图的分页设计使用了"jquery.pagination.js"分页插件,编写如代码清单3-15所示的脚本,其中getOpt定义了分页工具条的一些基本属性,pageaction通过"./list"调用控制

深入实践Spring Boot3.3 使用Thymeleaf模板

3.3 使用Thymeleaf模板 完成了模型和控制器的设计之后,接下来的工作就是视图设计了.在视图设计中主要使用Thymeleaf模板来实现.在进行视图设计之前,先了解一下Thymeleaf模板的功能. Thymeleaf是一个优秀的面向Java的XML/XHTML/HTML 5页面模板,并具有丰富的标签语言和函数.使用Spring Boot框架进行界面设计,一般都会选择Thymeleaf模板.

深入实践Spring Boot3.4 视图设计

3.4 视图设计 视图设计包括列表视图.新建视图.查看视图.修改视图和删除视图设计等5个方面有关数据的增删查改的内容. 我们知道,视图上的数据存取不是直接与模型打交道,而是通过控制器来处理.在视图中对于控制器的请求,大多使用jQuery的方式来实现.jQuery是一个优秀的JavaScript程序库,并且具有很好的兼容性,几乎兼容了现有的所有浏览器. 下面的视图设计将以电影的视图设计为例说明,演员的视图设计与此类似,不再赘述.

深入实践Spring Boot3.4.2 新建视图设计

3.4.2 新建视图设计 1.?新建对话框设计 新建电影时,在电影主页中打开一个对话框显示新建的操作界面,对话框设计引用了"artDialog.js"的对话框插件,然后编写一个脚本来打开对话框,如代码清单3-17所示.其中"./new"是连接控制器的请求URL,注意这里使用了相对路径,这个URL通过"$.get"请求返回新建电影的HTML页面,请求链接中的ts参数传递的是当前时间,这是为了保证该链接是一个全新的链接,以使浏览器能显示一个最新的内容