Lv.12 テンプレートエンジンの文法早見表! [play framework2.0] [java]

Lv.12 テンプレートエンジンの文法早見表! [play framework2.0] [java]

テンプレートエンジンはscalaっぽいけど大丈夫だよ、と公式には書いてある。
けど、複雑なことをするとscalaの知識がないと分からない。
自分では複雑な事書かなくても、一緒に実装している人が書いていたら、やはり理解
するために多少のscala知識が必要になりそうです。

でも8割はJavaの知識だけでも大丈夫そうです!ほっ。

テンプレートエンジンの文法早見表

横幅大きめのテーブルでお届けします。

@のシンタックス
記述ルール 説明
@() 1行の動的コードが書ける
[scala toolbar=”false”]Hello @(customer.getFirstName() +
customer.getLastName())![/scala]
@{} 2行以上の動的コードが書ける
[scala toolbar=”false”]Hello @{val name = customer.getFirstName() +
customer.getLastName(); name}![/scala]
@@ アットマークをエスケープできる
[scala toolbar=”false”]My email is soylatte@@example.com[/scala]
@* *@ コメント。コメントならテンプレート引数より上段に記載してもOK
[scala toolbar=”false”]@*********************
* This is a comment *
*********************@ [/scala]
テンプレートパラメーター(引数。最初に宣言しないとダメ。)
記述ルール 説明
@(名1:値1 [,名2:値2…]) 1つ以上の変数を定義できる
[scala toolbar=”false”]@(customer: models.Customer,
orders: List[models.Order])[/scala]
@(名:型 = 初期値) 初期値をセットできる
[scala toolbar=”false”]@(title: String = “Home”)[/scala]
@(名1:値1)(名2:値2) 複数のグループを宣言できる
[scala toolbar=”false”]@(title:String)(body: Html)[/scala]
各ロジック
記述ルール 説明
@import パス インポートできる。テンプレート引数の下に記載する
[scala toolbar=”false”]@**テンプレート引数**@
@(customer: models.Customer,
orders: List[models.Order])
@**インポート**@
@import utils._[/scala]
@for(リストの子 <- リスト){ @リストの子 } ループ
[scala toolbar=”false”]

    @for(p <- products) {
  • @p.getName() ($@p.getPrice())
  • }

[/scala]

@if(式){…}else{…} 条件分岐
[scala toolbar=”false”]@if(items.isEmpty()) {

Nothing to display

} else {

@items.size() items!

}[/scala]

@関数名(引数名:値) = {処理} 再利用可能なコードブロック。
あんまりテンプレートで複雑なことをしないほうがいいっぽい。JavaでHtmlを加工したほうがマシな場合もある、とのこと。
[scala toolbar=”false”]@**宣言**@
@display(product: models.Product) = {
@product.getName() ($@product.getPrice())
}
@**使い方**@

    @for(product <- products) { @display(product) }

[/scala]

@関数名(引数名:型) = {処理} 再利用可能なコードブロックその2。同上の注意。
[scala toolbar=”false”]@**宣言**@
@title(text: String) = @{
text.split(‘ ‘).map(_.capitalize).mkString(” “)
}
@**使い方**@

@title(“hello world”)

[/scala]

@implicitから始まる再利用可能なコードブロック 暗黙変換できる。
scalaの暗黙変換について説明してくれているブログ。etc9さん。
[scala toolbar=”false”]@implicitFieldConstructor
= @{ MyFieldConstructor() }[/scala]
@defining(処理){キー⇒値} 局所変数(ローカル変数)を扱う。
[scala toolbar=”false”]@defining(user.getFirstName() +
” ” + user.getLastName()) { fullName =>

Hello @fullName

}[/scala]

@コンテントタイプ(引数) エスケープしない処理。「<」とかはエスケープされているので、予期した通りに表示されないこともある。
そういう場合は、コンテントタイプ(HtmlとかXml)で囲んであげる。
[scala toolbar=”false”]
@Html(article.content)

[/scala]

アセスメント

  • @{}で実現できることが分かる
  • インポートを記載する場所が分かる
  • ループの記載方法が分かる
  • 条件分岐の記載方法が分かる
  • 再利用可能なコードブロックの記載方法が分かる

公式ドキュメントは、template engineです。