Applicationの
indexアクションでは、
index.scala.htmlをレンダリングしレスポンスとして返すような処理を行なっていました。では、レンダリングされる
index.scala.htmlというのは、どういうものなのでしょうか?
「htmlだから、普通のHTMLファイルだろう」と思った人。では実際に
index.scala.htmlの中身を見てみましょう。――下のリスト欄に、その内容を掲載しておきます。HTMLのタグなんて一つもありません! なにやらよくわからないスクリプトばかりですよ?
この「
○○.scala.html」は、ビューの
テンプレートと呼ばれるファイルです。HTMLで終わることでもわかるように、基本的にHTMLのタグを書いておけば、それがそのままレンダリングされ表示されるのです。
ただし! 普通のHTMLと違い、HTML以外のものも記述することができます。それは、Javaの世界のJSPなどでお馴染みの「
式言語」に相当するものです。
この
○○.scala.htmlというテンプレートファイルでは、
アットマーク(
@)をつけることでScalaの文を直接テンプレート内に書いておくことができるようになっているのです。つまり、この
index.scala.htmlに書かれていたのは、
@を使った式言語の一種だったわけです。
では、ここで書かれているスクリプトはどのようなことをしているのか、ざっと見てみましょう。
@(message: String)
まず最初にあるこの文は、
String型の値を保管する変数
messageの宣言です。一番最初にある変数宣言は、このテンプレートをレンダリングする際に引数として渡される値を受け取るのに用意されるものです。
先に、
Applicationコントローラーの
indexメソッドで
views.html.indexを呼び出した時、テキストが引数として渡されていたことを思い出してください。このテキストが、ここで変数
messageに代入されているのです。
@main("Welcome to Play 2.0") {……略……}
これが、このテンプレートでのポイントになります。これは、「
main」という関数を呼び出している部分なのです。「
views」フォルダの中には、もう1つ、「
main.scala.html」というファイルが用意されていました。このファイルをレンダリングするのが、
main関数です。先ほど、コントローラーの
indexで使った
views.html.indexと同様に、
views.html.mainという関数も用意されているわけで、それが
mainだけで呼び出せるようになってる……と考えるとわかりやすいでしょう。
この
mainの呼び出し、よく見てみると、その後の
()内に引数としてテキストがあるのはわかるとして、更にその後に
{}が付けられています。
()は引数として渡される値ですが、その後の
{}部分は? これは、レンダリングされるテンプレート側に、HTMLコンテンツとして渡されるのです。
では、この
{}内で実行している以下の文はどういうものでしょうか。
@play20.welcome(message)
これは、
play20というオブジェクトにある
welcomeメソッドを呼び出すものです。これは、いわゆる「ウェルカム画面」をレンダリングし出力するためのものです。
play runでアプリケーションにアクセスしてみると、Play Framewrokが用意した画面が表示されましたね? あれが、
play20.welcomeで生成された画面です。
ということは、この文を削除して、ここに表示させたいHTMLタグを書けば、それが画面に表示される、ということになります。――ただし! これは、
main関数の中に書かれていることを忘れてはいけません。すなわち、
main.scala.htmlのテンプレートに嵌めこまれて表示される、というものであるのを理解しておく必要があります。