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

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

作成:2013-01-21 08:05
更新:2013-01-21 08:05

■パラメータを使ってアクションに値を渡す

次は、「アクションに何らかの値を渡す」という方法について。あるアクションにアクセスするときに、何かの値を渡したい、という場合があります。例えばデータのID番号をつけてアクションを呼び出して、それによって指定のデータを表示する――なんてことありますね。

このような場合、もっとも簡単なのは、アクセスするアドレスにパラメータの情報を追加することです。例えば、http://localhost:9000/paramというアドレスにアクションが用意されていた時、/param/123というようにしてアクセスすることで、123という値をアクションに送る――これが、パラメータによる情報の送付の考え方です。

よくWebサイトでは、/index?a=123&b=456などというように?をつけてパラメータを記述するやり方(クエリーテキストというものです)が見られます。これでもいいのですが、Play Frameworkではもっとスマートな形でアドレスを割り当てることができます。

では、実際に簡単なアクションを作ってみましょう。ここでは、Applicationクラスに「param」というアクションメソッドを追加してみましょう。そしてこのアクションを、「/param/番号」という形でルーティングしてみます。最後の「番号」のところに整数値をつけてアクセスすると、その値がアクションで受け取れるようにしよう、というわけです。

まずはコントローラーの修正から行いましょう。Applicationクラスに以下のようなメソッドを追加します。
def param (id:Long) = Action {
    val title = "パラメータページ"
    val msg = "送信されたパラメータは、" + id + "でした。"
    Ok(views.html.index(title, msg))
}
これがparamアクションのメソッドです。見ればわかるように、paramの後に(id:Long)という引数の指定が追加されています。これに、アクセス時のパラメータが渡されることになります。

次の修正は? ビュー関係はとりあえず不要です。他に必要となるのは、ルート情報の記述でしょう。routesファイルを開き、以下のように追記しましょう。
GET  /param/:id  controllers.Application.param(id:Long)
これでOKです。ここでは、「/param/:id 」という形でアドレスが指定されています。「:id」というのは、ここにidという値が書かれる、ということを示します。その後のメソッド呼び出しを見ると、param(id:Long)というように、idの値が引数に指定されて呼び出されていることがわかるでしょう。

このように、アドレス側に「:○○」というようにして変数の名前となるものを追加し、呼び出すメソッドの引数にその変数を設定することで、アドレスに記述されたパラメータの情報をアクションメソッドに渡すことが可能となります。実際に、

http://localhost:9000/param/123

例えばこんな具合にアクセスしてみると、「送信されたパラメータは、123でした。」といったメッセージがページに表示されます。パラメータの値が取り出されていることがわかるでしょう。

このように、ルートとアクションメソッドに注意するだけで、必要な値を簡単にアクションに渡すことができます。ただし、このようにすると、例えば「http://localhost:9000/param」というようにアクセスすることはできなくなります。メソッドを/param/:idというアドレスに割り当ててますから、必ずidの値を記述しなければいけないのです。この点に注意しましょう。

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

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

●Applicationクラスに追加するメソッド

def param (id:Long) = Action {
    val title = "パラメータページ"
    val msg = "送信されたパラメータは、" + id + "でした。"
    Ok(views.html.index(title, msg))
}


●routesへの追加

GET   /param/:id      controllers.Application.param(id:Long)

※関連コンテンツ

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