Sharable

システム&ウェブのシェアラブル

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

2012年3月30日

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

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

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

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

@のシンタックス
記述ルール 説明
@() 1行の動的コードが書ける
Hello @(customer.getFirstName() +
customer.getLastName())!
@{} 2行以上の動的コードが書ける
Hello @{val name = customer.getFirstName() +
customer.getLastName(); name}!
@@ アットマークをエスケープできる
My email is soylatte@@example.com
@* *@ コメント。コメントならテンプレート引数より上段に記載してもOK
@*********************
 * This is a comment *
 *********************@  
テンプレートパラメーター(引数。最初に宣言しないとダメ。)
記述ルール 説明
@(名1:値1 [,名2:値2…]) 1つ以上の変数を定義できる
@(customer: models.Customer, 
orders: List[models.Order])
@(名:型 = 初期値) 初期値をセットできる
@(title: String = "Home")
@(名1:値1)(名2:値2) 複数のグループを宣言できる
@(title:String)(body: Html)
各ロジック
記述ルール 説明
@import パス インポートできる。テンプレート引数の下に記載する
@**テンプレート引数**@
@(customer: models.Customer, 
orders: List[models.Order])
@**インポート**@
@import utils._
@for(リストの子 <- リスト){ @リストの子 } ループ
<ul>
@for(p <- products) {
  <li>@p.getName() ($@p.getPrice())</li>
} 
</ul>
@if(式){…}else{…} 条件分岐
@if(items.isEmpty()) {
  <h1>Nothing to display</h1>
} else {
  <h1>@items.size() items!</h1>
}
@関数名(引数名:値) = {処理} 再利用可能なコードブロック。
あんまりテンプレートで複雑なことをしないほうがいいっぽい。JavaでHtmlを加工したほうがマシな場合もある、とのこと。
@**宣言**@
@display(product: models.Product) = {
  @product.getName() ($@product.getPrice())
}
@**使い方**@ 
<ul>
@for(product <- products) {
  @display(product)
} 
</ul>
@関数名(引数名:型) = {処理} 再利用可能なコードブロックその2。同上の注意。
@**宣言**@
@title(text: String) = @{
 text.split(' ').map(_.capitalize).mkString(" ")
}
@**使い方**@ 
<h1>@title("hello world")</h1>
@implicitから始まる再利用可能なコードブロック 暗黙変換できる。
scalaの暗黙変換について説明してくれているブログ。etc9さん。
@implicitFieldConstructor 
= @{ MyFieldConstructor() }
@defining(処理){キー⇒値} 局所変数(ローカル変数)を扱う。
@defining(user.getFirstName() + 
" " + user.getLastName()) { fullName =>
  <div>Hello @fullName</div>
}
@コンテントタイプ(引数) エスケープしない処理。「<」とかはエスケープされているので、予期した通りに表示されないこともある。
そういう場合は、コンテントタイプ(HtmlとかXml)で囲んであげる。
<p>
  @Html(article.content)    
</p>

アセスメント

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

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

このエントリーをはてなブックマークに追加