コンテンツにスキップ

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