コントローラーとビューを使おう![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 =>これで、定数queriesには、送信されたフォームの情報がまとめられたMapが保管されます。このMapから、name, mail, ageのそれぞれの送信情報を取り出します。
val queries = request.body.asFormUrlEncoded
val name_vals = queries.get("name")getメソッドを呼び出すことで、それぞれの値が取り出されました。後はこれらをもとに、メッセージのテキストを作成するだけです。
val mail_vals = queries.get("mail")
val age_vals = queries.get("age")
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
※関連コンテンツ