天天看點

深入實踐Spring Boot3.2.3 修改控制器

<b>3.2.3 修改控制器</b>

若要實作對電影的修改及儲存操作,需要先将電影的資料展示在視圖界面上,然後接收界面的操作,調用資料管理子產品将更改的資料儲存至資料庫中,如代碼清單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&lt;actor&gt; 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)

&amp;&amp; !stringutils.isempty(actorid)) {

            actor actor =

actorrepository.findone(new long(actorid));

            old.addrole(actor, rolename);

        }

        movierepository.save(old);

        logger.info("修改-&gt;id="+old.getid());

        return "1";

}