SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaで軽快に使える「軽量フレームワーク」特集

Javaで軽快に使える「軽量フレームワーク」特集
~本格的なRoRスタイルフレームワーク「Play!」(2)

第8回

データの修正

 続いて、保存してあるデータの修正機能を作りましょう。これは、データの作成と検索を組み合わせたような形になります。すなわち、あらかじめ編集するデータを検索して取り出し、値を変更してからまた保存する、といった作業を行えばいいのです。

 では、テンプレートを作成しましょう。「views」の「Application」内に、新たに「edit.html」というファイルを作り、次のようにソースコードを記述します。

#{extends 'main.html' /}
#{set title:'Home' /}
<h1>メッセージの編集</h1>
${msg}
#{if data != null}
<form method="post" action="@{Application.edit}">
<input type="hidden" name="id" value="${data.id}" />
<table>
	<tr><td>id:</td><td>${data.id}</td></tr>
	<tr><td>name:</td><td><input type="text" name="name" value="${data.name}" /></td></tr>
	<tr><td>message:</td><td><input type="text" name="message" value="${data.message}" /></td></tr>
	<tr><td></td><td><input type="submit" value="送信" /></td></tr>
</table>
</form>
#{/if}

 ここでは、特定のデータの編集を行うためのフォームを用意しています。このフォームでは、id番号を<input type="hidden">で保持しており、その他のnamemessage<input type="text">で編集できるようにしています。それぞれ、${data}の値をコントロールのvalueに設定することで、編集するデータの値があらかじめ入力フィールドに設定されるようにしておきます。

 後はコントローラー側で、あらかじめ編集するデータを取得して${data}として渡すように処理を用意すればいいでしょう。そしてPOST送信されたら、そのデータを修正し保存するわけです。では、コントローラーにeditメソッドを実装しましょう。

public static void edit(long id,String message,String name){
	String msg = "データを編集してください。";
	MsgData data = null;
	data= MsgData.findById(id);
	if (request.method.equals("POST")) {
		data.name = name;
		data.message = message;
		data.save();
		msg = "データを更新しました。";
	}
	render(data,msg);
}
指定したidのデータがフォームに表示される。これを書き換えて送信すると変更される
指定したidのデータがフォームに表示される。これを書き換えて送信すると変更される

 編集するデータは、idというパラメータで指定するようにします。アクセスする際、「http://localhost:9000/edit?id=1」というように、editの後に「?id=番号」という形でデータのid番号をつけてアクセスすると、そのデータがフォームにセットされます。これで内容を書き換えて送信すれば、そのデータが修正されます。

 ここでは、まずGETでアクセスした際には、引数のidの値を使ってデータを取得し、renderに渡します。idによるデータの取得は、findではなく次のように簡単に行えます。

data= MsgData.findById(id);

 「findById」は、引数に指定したid番号のデータを取り出すものです。注意しておきたいのは、「引数はintではなくlongである」という点でしょう。こうしてデータを取り出したら、その値を書き換えて保存します。POST時の処理は、次のように行っています。

data.name = name;
data.message = message;
data.save();

 インスタンスのフィールドに新しい値を設定し、saveで保存するだけです。saveは、このようにデータを新たに保存するだけでなく、既にあるデータの更新にも用いられます。

データの削除

 残るは、データの削除です。これも、データの修正のインターフェースをそのまま利用しましょう。id=xxという形でパラメータを付けてアクセスするとそのデータが表示され、ボタンを押して送信するとそのデータが削除される、といった形にするわけです。

 まずはテンプレートからです。「views」の「Application」内に「del.html」というファイルを新たに作成し、次のように記述をします。

#{extends 'main.html' /}
#{set title:'Home' /}
<h1>メッセージの削除</h1>
${msg}
#{if data != null}
<form method="post" action="@{Application.del}">
<input type="hidden" name="id" value="${data.id}" />
<table>
	<tr><td>id:</td><td>${data.id}「${data.message}」</td></tr>
	<tr><td></td><td><input type="submit" value="削除する" /></td></tr>
</table>
</form>
#{/if}

 基本的な形は、edit.htmlと同じです。違いは、フォームにはidを送信する<input type="hidden">タグしかない、という点です。削除するid番号さえ分かればいいのですから、これで十分です。

 続いてコントローラーです。Applicationクラスに「del」メソッドを新たに用意し、次のように記述をしましょう。

public static void del(long id,String message,String name){
	String msg = "データを削除していいですか。";
	MsgData data = null;
	data= MsgData.findById(id);
	if (request.method.equals("POST")) {
		data.delete();
		msg = "データを削除しました。";
	}
	render(data,msg);
}
指定したidのデータが表示される。送信するとそのデータが削除される
指定したidのデータが表示される。送信するとそのデータが削除される

 先ほどのeditと同様に「del?id=1」というように削除するデータのid番号をパラメータにつけてアクセスすると、そのデータの内容が表示されます。それを確認し、ボタンをクリックするとそのデータが削除されます。ここでは、MsgData.findById(id)で送られたid番号のデータを取得した後、次のようにして削除をしています。

data.delete();

 たったこれだけで、そのデータは削除されます。実に単純です。

次のページ
CRUDによる自動生成

この記事は参考になりましたか?

Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4751 2010/01/28 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー