コントローラーとビューを使おう![Scala編] (4/5)
作成:2013-01-21 08:10
更新:2013-01-21 08:10
更新:2013-01-21 08:10
■フォーム送信の実際
では、実際に簡単なサンプルを挙げておきましょう。ここでは、「/form」と「/sendform」という2つのアクションを用意することにしましょう。ビューは、そのままindex.scala.htmlを書き換えて使うことにします。他、routesへの追記も忘れないでください。(下のリスト欄を参照)
/formにアクセスすると、3つの入力フィールドがある画面が表示されます。これは、それぞれ名前・メールアドレス・年齢を入力するフォームです。それぞれにテキストを書いて送信すると、送られた内容が表示されます。
ここでは、formアクションでそのままindex.scala.htmlを表示し、フォームを送信すると/sendformでそれを処理しています。sendformアクションメソッドでは、以下のようにして送信された情報を取り出しています。
/formにアクセスすると、3つの入力フィールドがある画面が表示されます。これは、それぞれ名前・メールアドレス・年齢を入力するフォームです。それぞれにテキストを書いて送信すると、送られた内容が表示されます。
ここでは、formアクションでそのままindex.scala.htmlを表示し、フォームを送信すると/sendformでそれを処理しています。sendformアクションメソッドでは、以下のようにして送信された情報を取り出しています。
def sendform = Action { request =>
val queries = request.body.asFormUrlEncodedこれで、定数queriesには、送信されたフォームの情報がまとめられたMapが保管されます。このMapから、name, mail, ageのそれぞれの送信情報を取り出します。val name_vals = queries.get("name")
val mail_vals = queries.get("mail")
val age_vals = queries.get("age")getメソッドを呼び出すことで、それぞれの値が取り出されました。後はこれらをもとに、メッセージのテキストを作成するだけです。val msg = "NAME:" + name_vals(0) +Mapから取り出された値は配列の形になっていますから、その最初の値を取り出してまとめています。基本的な流れさえわかれば、意外と簡単ですね?
", MAIL:" + mail_vals(0) +
", AGE:" + age_vals(0)
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
●Applicationクラスに追加するメソッド
def form = Action {
val title = "フォーム・サンプル"
val msg = "名前・メール・年齢を入力ください。"
Ok(views.html.index(title, msg))
}
def sendform = Action { request =>
val queries = request.body.asFormUrlEncoded
val name_vals = queries.get("name")
val mail_vals = queries.get("mail")
val age_vals = queries.get("age")
val msg = "NAME:" + name_vals(0) +
", MAIL:" + mail_vals(0) +
", AGE:" + age_vals(0)
val title ="フォーム・サンプル"
Ok(views.html.index(title, msg))
}
●index.scala.htmlの修正
@(title: String, message: String)
@main(title) {
@main(message){
<h1>@title</h1>
<p>@message</p>
<hr>
<form method="post" action="/sendform">
<input type="text" id="name" name="name"><br>
<input type="text" id="mail" name="mail"><br>
<input type="text" id="age" name="age"><br>
<input type="submit">
</form>
}
}
●routesへの追記
GET /form controllers.Application.form
POST /sendform controllers.Application.sendform
※関連コンテンツ