データの作成と保存
では、このMsgDataクラスを新たに作成するアクションを用意しましょう。ここでは「add」というアクションとして用意することにします。まず、テンプレートを作りましょう。「views」内の「Application」内に、新しく「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 type="submit" value="送信" /></td></tr>
</table>
</form>
今回は、nameとmessageという2つの入力フィールドを持ったフォームを用意しました。送信先には、action="@{Application.add}"を指定しています。これで、Applicationクラスにaddメソッドを用意すればいいことが分かります。
これでテンプレートは完成ですが、このままだと表示があまりに寂しいので、スタイルシートを用意しておきましょう。Play!では、スタイルシートのような静的ファイルは「public」内に配置します。この中に「stylesheets」というフォルダがあり、そこに「main.css」というファイルが作成されています。これが標準で作成されるスタイルシートのファイルです。これを開き、次のように追記しておきます。
body {
font-size:10pt;
background-color:#F6FFFF;
color:#003366;
}
h1 {
font-size:12pt;
background-color:#CCDDFF;
padding: 3px;
}
スタイルシートなので、内容はそれぞれで適当に調整してください。
では、続いてコントローラーの作成です。Applicationクラスに、addメソッドを定義しましょう。
public static void add(String message,String name){
String msg = "データを入力下さい。";
if (request.method.equals("POST")) {
MsgData data = new MsgData(message,name);
data.save();
msg = "データを保存しました。";
}
render(msg);
}

これで完成です。http://localhost:9000/application/addにアクセスをすればフォームが表示され、ここに入力して送信すれば、データが保存されます(ただし、まだ表示はされません)。毎回アドレスを/application/addと入力しないといけないのはちょっと面倒なので、「routes」ファイルに次のように追記をしておきましょう。
* /{action} Application.{action}
これで、Applicationクラスのアクションメソッドは、すべてルートにマッピングされます。今回のaddを呼び出したければ、http://localhost:9000/addで表示されるようになります。
addメソッドの流れ
では、ここで行っている処理を見てみましょう。まず、メソッドではadd(String message,String name)というように引数が設定されています。アクションメソッドでは、送信されたパラメータが同名の変数として渡されるようになっていました。これで、フォームから送信されたmessageとnameの値が引数で得られるようになります。
request.method.equals("POST")でPOST送信されたかどうかをチェックし、trueであれば、次のようにしてMsgDataをデータベースに保存しています。
MsgData data = new MsgData(message,name); data.save();
説明するまでもないほどに簡単です。new MsgDataでインスタンスを作成し、その「save」メソッドを呼び出すだけです。これで、MsgDataインスタンスはデータベースに保管されてしまいます。これが、モデルクラスの威力です。モデルをデータベースに保存するための具体的なコードは、特に記述する必要はありません。
