Plya2-Scala/view

作り方

views ディレクトリ以下に適当にディレクトリを作って(別に作らなくてもよい)そこに

hogehoge.scala.html

というファイル名で作る

そして先頭行にコメントを入れる

@* hogehoge *@

この @* に挟まれた範囲がコメントになる。

特に必須では無いのだが Eclipse はこの先頭行のコメントを読んでいるらしく、この先頭行コメントがないと Scala Template ファイルとして認識してくれない。

単にHTMLを出力する(パラメータ無し)

パラメータ無しで単に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

View の中での制御構文

@ につづいて書けばそれはすべて 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 に続きディレクトリ階層をフルで書いて呼び出す

play_framework/play2_scala/view.txt · 最終更新: 2020-08-03 13:15 by ore