libro
www.tuyano.com
初心者のためのPlay Framework入門

コントローラーとビューを使おう![Scala編] (4/5)

作成: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アクションメソッドでは、以下のようにして送信された情報を取り出しています。
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) +
    ", MAIL:" + mail_vals(0) +
    ", AGE:" + age_vals(0)
Mapから取り出された値は配列の形になっていますから、その最初の値を取り出してまとめています。基本的な流れさえわかれば、意外と簡単ですね?

※プログラムリストが表示されない場合

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

※関連コンテンツ

「初心者のためのPlay Framework入門」に戻る