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

Playアプリケーションの仕組みを知ろう! (4/6)

作成:2013-01-14 10:44
更新:2013-01-14 10:44

■index.scala.htmlテンプレートの働き

Applicationindexアクションでは、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のテンプレートに嵌めこまれて表示される、というものであるのを理解しておく必要があります。

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

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

●プログラム・リスト●

●index.scala.htmlの内容

@(message: String)

@main("Welcome to Play 2.0") {
    
    @play20.welcome(message)
    
}
※関連コンテンツ

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