2008/04/15からのアクセス回数 6866 mvc-conventionの例題は、Recipeの追加削除ができません。 ここでは、RecipeのCRUD(Create, Read, Update, Delete)機能が使えるように変更します。 コントローラの変更 †EditRecipeControllerの変更 †最初に、EditRecipeControllerのformBackingObjectを変更します。 新規のRecipeの追加の場合には、idがセットされていませんので、idがHTTP要求に ない場合の処理を追加します。 protected Object formBackingObject(HttpServletRequest request) throws Exception { try { long id = ServletRequestUtils.getRequiredLongParameter(request, "id"); Recipe recipe = this.recipeManager.findById(new Long(id)); return recipe; } catch (MissingServletRequestParameterException e) { Recipe recipe = new Recipe(); return recipe; } } SwitchBoardControllerの変更 †次に、SwitchBoardControllerにdeleteメソッドを追加します。 deleteメソッドでは削除した後switchboard/listRecipesに画面を遷移しますので、 モデルにrecipeListを追加する必要があります。 deleteメソッドは、以下のようになります。 public ModelAndView delete(HttpServletRequest request, HttpServletResponse response) throws Exception { long id = ServletRequestUtils.getRequiredIntParameter(request, "id"); Recipe recipe = recipeManager.findById(new Long(id)); ((IRecipeDao)recipeManager).delete(recipe); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject(recipeManager.findAll()); modelAndView.setViewName("switchboard/listRecipes"); return modelAndView; } ここで、recipeManagerを、移植のためStubRecipeDaoManagerに代えましたが、型宣言は RecipdeManagerのままなので、以下のように IRecipeDaoのインタフェースを使用するためにIRecipeDaoでキャストします。 ((IRecipeDao)recipeManager).delete(recipe); これでコントローラの処理は完了です。 ビューの変更 †listRecipes.vmの変更 †削除リンクの追加は、編集リンクと同様に #set( $deleteLink = "/switchboard/delete.htm?id=${recipe.id}" ) <td><a href="#springUrl(${deleteLink})">[delete]</a></td> とします。 新規追加リンクは、idを指定しないでeditrecipe.htmに遷移させます。 <a href='#springUrl("/editrecipe.htm")'>add</a> 修正されたlistRecipes.vmは以下にあります。 editRecipe.vmの変更 †recipe.idがセットされていないときには、HTTPのPOST処理でidが送信されないようにするために、 以下のようにif文を入れます。 #if ( $recipe.id ) <input type="hidden" name="id" value="$!recipe.id"> #end $recipe.idがnullでないときのみidをhiddenにセットします。 修正されたeditRecipe.vmは以下にあります。 動作確認 †mavenのjettyプラグインを起動します。 $ jetty:run 次にブラウザーで http://localhost:8080/mvc-convention/ と入力すると以下の画面に代わります。 addリンクをクリックするとNameのテキスト入力が空の画面になります。 テストと入力して、Save Changeボタンを押すと、テストがリストに追加されています。 最後に、deleteリンクを押すとテストが削除されて、最初のリスト画面になります。 コメント †この記事は、 皆様のご意見、ご希望をお待ちしております。 Tweet |