menu
書いてる野郎
orebike@gmail.com
views ディレクトリ以下に適当にディレクトリを作って(別に作らなくてもよい)そこに
hogehoge.scala.html
というファイル名で作る
そして先頭行にコメントを入れる
@* hogehoge *@
この @* に挟まれた範囲がコメントになる。
特に必須では無いのだが Eclipse はこの先頭行のコメントを読んでいるらしく、この先頭行コメントがないと Scala Template ファイルとして認識してくれない。
パラメータ無しで単にHTMLのみを出力する場合は何も関係ない。普通にHTMLを書いていけばいい。
コントローラーからパラメータを受け取る場合は、このように冒頭で @ に続き変数宣言的なものを書く。
@(title:String, body:String)
<html>
<head>
<title>@title</title>
</head>
<body>
@body
</body>
</html>
コントローラからは Plya2-Scala/controller/イロイロな出力 で示しているように、このようにパラメータを渡す。 これは Scala の名前付き引数を使って対応が分かりやすいように記述している。
def myViewParams = Action { Ok(views.html.MyView.params(title = "aaaaaaaaaaaaaa", body = "bbbbbbbbbb")) }
引き込んだパラメータは @ に続きその変数名で出力される。
この Play の View では @ に続く記述は Scala コードとして解釈される。終わりがどこになるかは文脈から自動的に判定される。
この部分はほぼ Scala なのでかなり自由になんでも書けるので JSPの窮屈さから開放された感じがして嬉しいところだ。
通常は @ に続きパラメータ名を書けば後はエンジン側が自動判定してくれるのだが、何かに密着させて書きたい場合、
例えばhogeというパラメータ名の後に即hogeという文字列を突っ込みたい場合、このように括弧で明示する。
@(hoge)hoge
こっちの括弧でもOKのようだ。
@{hoge}hoge
@ につづいて書けばそれはすべて Scala なので、Scala の 制御構文 がほぼ全部そのまま使える
中身を主体にして外側の枠を選択する機能である
呼び出される主体はこのように作成する。 これを普通の Scala Template 同様にコントローラーから呼び出す。 最初に @ から書いているのは外枠であるレイアウトにあたる Scala Template である。
@views.html.common.myLayout(title = "piyopiyo") {
<h1>hogehoge</h1>
}
レイアウト部分はこのように書く。2個めの括弧内の body の変数は中身を表す。
@(title:String)(body: Html)
<html>
<head>
<title>@title</title>
</head>
<body>
@body
</body>
</html>
変数が、このようなブロックを引数に取っていると考える。
{
<h1>hogehoge</h1>
}
コードがうまく Scala っぽく実現されていて気持ちが良い。
レイアウトのような枠ではなく、ヘッダーやフッター等の共通部分をもってくるような場合である
同一ディレクトリ階層にある Scala Template はその名前をズバリでもってこれる
header.scala.html というファイルなら
@header("piyopiyo")
のように関数を実行するようにすると展開される。
ディレクトリ階層の違うものを持ってくるならば
@views.html.MyView.header("piyopiyo")
このように views.html に続きディレクトリ階層をフルで書いて呼び出す