第5章 変更
1 商品の変更
商品の変更画面を作ります。まず、商品一覧(slist.html)の各商品の変更リンクを作り、そこをクリックすると、各商品の変更入力画面に遷移します。そこで変更箇所を入力し、変更ボタンを押すと、商品が変更され、商品一覧に戻ります。
商品一覧 → 変更入力 → 変更 → 商品一覧
まず、商品一覧から変更入力画面へのリンクを作成します。slist.jsp を修正し、変更画面にリンクを貼ります。変更画面は update?sid=商品ID というURLにします。
<td><a href="update?sid=${shouhin.sid}">変更</a></td>
これにより、「変更」が商品の削除確認画面へのリンクとなります。
2 変更画面
次に変更画面を作ります。 UpdateServletを作成します。URLは /update とします。
リンク update?sid=商品ID という形でこのサーブレットはアクセスされますのでまずは、送られてきたsidを受け取ります。
int sid = Integer.parseInt(request.getParameter("sid"));
次にこの商品IDで商品テーブルを検索します。sidは主キーなのでDAOのfindBySidで行います。
ShouhinDAO dao = new ShouhinDAO();
Shouhin s = dao.find(sid);
商品の検索ができたら、update.jspにshouhinという名前で渡します。
update.jsp では、商品ID、商品名、単価をテキストボックスで表示します。 商品IDはhiddenで見えないようにして送信します。 商品ボタンを押すと、URL /update にPOSTで遷移します。
<form action="update" method="post">
<p>商品名:<input type="text" name="sname" value="${shouhin.sname }"></p>
<p>単価 :<input type="text" name="tanka" value="${shouhin.tanka }"></p>
<input type="hidden" name="sid" value="${shouhin.sid }">
<input type="submit" value="削除">
</form>
3 変更処理
UpdateServletのdoPostではsidを受け取ってデータベースからの変更処理を行います。
まず、フォームからsid、sname、tankaを受け取ります。
request.setCharacterEncoding("UTF-8");
int sid = Integer.parseInt(request.getParameter("sid"));
String sname = request.getParameter("sname");
int tanka = Integer.parseInt(request.getParameter("tanka"));
次に送信された情報でDTOを作成し、作成したDTOをDAOのupdateメソッドに渡し、更新します。
ShouhinDAO dao = new ShouhinDAO();
Shouhin dto = new Shouhin(sid, sname, tanka);
dao.update(dto);
変更が終わったら、商品一覧に自動で移動(リダイレクト)します。
response.sendRedirect("slist");