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