SHOEISHA iD

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

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

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

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

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

第9回

MsgDataのコントローラー

 続いて、MsgDataを修正していきましょう。まずはコントローラークラスからです。これも、indexaddの2つだけを用意しておくことにします。

package controllers;

import java.util.List;
import models.*;
import play.mvc.Controller;


public class Application extends Controller {
	
	public static void index(String name) {
		List<MsgData> datas = null;
		datas = MsgData.findAll();
		render(datas);
	}
	
	public static void add(String message,String name){
		String msg = "データを入力下さい。";
		if (request.method.equals("POST")) {
			PersonData person = PersonData.find("name",name).first();
			if (person != null){
				MsgData data = new MsgData(message,person);
				data.save();
				person.save();
				msg = "データを保存しました。";
			} else {
				msg = "個人データが未登録です。";
			}
		}
		render(msg);
	}

}

 indexは、findAllしたものをrenderに渡しているだけなので、説明無用でしょう。ポイントはaddです。今回、MsgDataをただ登録するだけでなく、お互いの連携用に用意されたフィールドに必要な参照を保管する処理も行わなければいけません。では、addPOSTされた場合の処理を見てみましょう。

PersonData person = PersonData.find("name",name).first();

 まず、投稿されたnameでPersonDataインスタンスを検索し取得します。単純に、あるフィールドの値がある値のものを検索するなら、findメソッドでフィールド名と値を渡すだけです。クエリーを書く必要はありません。またその後にあるfirstは、取得したデータから最初のものを取り出し返す働きをします。

 これで、入力されたnameのPersonDataが得られました。これがnullだった場合には、データが未登録であるとして処理します。見つかった場合には、これを使ってMsgDataインスタンスを作成し、修正したインスタンスを保存します。

data.save();
person.save();

 これで、関連するモデルのインスタンスを保持した形でモデルが作成できました。

MsgData用テンプレートの作成

 後は、テンプレートを作成するだけです。「Application」にあるindex.html/add.htmlをそれぞれ修正しましょう。

・index.htmlのリスト
#{extends 'main.html' /}
#{set title:'Home' /}
<h1>メッセージ表示</h1>
#{list items:datas, as:'data'}
    <li>${data.id}: ${data.message}(${data.person.name}, ${data.person.mail})</li>
#{/list}

・add.htmlのリスト
#{extends 'main.html' /}
#{set title:'Home' /}
<h1>メッセージの作成</h1>
${msg}
<form method="post" action="@{Application.add}">
<table>
	<tr><td>name:</td><td><input type="text" id="name" name="name" /></td></tr>
	<tr><td>message:</td><td><input type="text" id="message" name="message" /></td></tr>
	<tr><td></td><td><input id="submit" type="submit" value="送信" /></td></tr>
</table>
</form>
MsgDataの追加。名前とメッセージを送信する
MsgDataの追加。名前とメッセージを送信する
登録されたMsgDataが一覧表示される
登録されたMsgDataが一覧表示される

 これで完成です。http://localhost:9000/addからデータを登録してみましょう。入力された名前をもとに、既にPersonDataが登録済みかをチェックし、未登録であればデータは作成されません。また、http://localhost:9000/では、登録されたメッセージとユーザー名、そしてメールアドレスが表示されます。MsgDataには、nameやmailの情報はありません。これらは、保管されたPersonDataから取り出して表示しているのです。名前の表示部分を見ると、${data.person.name}というようにして、MsgDataのpersonフィールドに保管されているPersonDataのnameを出力していることがよく分かります。

次のページ
ユーザーが投稿した全メッセージを表示する

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4752 2010/02/04 14:00

イベント

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

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

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

メールバックナンバー