次は、「アクションに何らかの値を渡す」という方法について。あるアクションにアクセスするときに、何かの値を渡したい、という場合があります。例えばデータの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の値を記述しなければいけないのです。この点に注意しましょう。