Template – Implicit objects
errors
コントローラで発生した検証エラー
flash
flash スコープ
lang
通信に使用されている言語
messages
ローカライズされたメッセージの map
out
The output stream writer
params
パラメータ
play
フレームワークのメインのクラス
request
HTTP リクエスト
session
セッションスコープ
Template – Tag grammar
${ client.name }
変数を評価し出力します。
${ client?.name }
client が null でなければ client.name を表示します。
@{ Controller.action() }
アクションへの相対パスの URL を計算します。
@{ Controller.action().secure() }
アクションへの HTTPS での相対パスの URL を計算します。
@@{ Controller.action() }
アクションへの絶対パスの URL を計算します。
@{'path/to/static_content'}
<img src="@{'/public/images/jpdf.png'}" class="center"/>
&{ message.key }
メッセージは conf/messages で管理され、多言語対応しています。
∗{ これはコメントです }∗
これ以上何を言えばいい?
%{ out.print("HelloWorld") }%
UI ロジック用の Groovy スクリプト
#{ my.custom.tag /}
典型的なカスタムタグ - page コンテキストは共有しません。
Template – Standard Tags
#{extends ʻpage.htmlʼ/}
#{doLayout /}
マスタテンプレートのデコレータ
#{get 'title'}Used if title not set#{/get}
#{set title:ʻHome Pageʼ}
ページとマスタテンプレート間で共有される変数
#{include 'tree.html'/}
ページの断片をインクルードします。 - page コンテキストは共有されます。
#{script id:'myscript' , src:ʻscript.js', charset:'utf-8' /}
#{stylesheet id:'main', media:'print', src:'print.css' /}
スクリプトとスタイルシートをインポートします。
#{a @Application.logout() }Disconnect#{/a}
#{form @Client.create() , id:'form' enctype:'multipart/form-
data' } ... #{/form}
アンカーやフォームを作るのに便利なタグ
#{verbatim}${'&'}#{/verbatim}
HTML エスケープを無効化します。
#{i18n /}
ローカライズされたメッセージを Javascript にエクスポートします。
#{ifErrors} <p>Error(s) found!</p> #{/ifErrors}
検証エラーをチェックします。
#{ifError 'user.name'} #{error 'user.name' /} #{/ifError}
指定されたエラーをチェックします。
#{errors} <li>${error}</li> #{/errors}
検証エラーを繰り返し処理します。
#{if cond}...#{/if}#{elseif cond}...#{/elseif}#{else}...#{/else}
#{ifnot cond}...#{/ifnot}
条件構文
#{list items:0..10, as:'i'}${i}#{/list}
#{list items:'a'..'z', as:'l'}${l} ${l_isLast ?'':'|' }#{/list}
#{list users}${_}#{/list}
ループ構文
#{list items:task, as:'task'}${task}#{/list}
#{else}No tasks on the list#{/else}
Tip: else は list と一緒に使えます。
#{cache ʻkeyʼ, for:ʼ15minʼ}...#{/cache}
15 分間コンテンツをキャッシュします。
Template – Custom Tags
@FastTags.Namespace("domain")
public class RecaptchaTag extends FastTags {
public static void _recaptcha(Map, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) { …
/app/view/tags/domain/mytag.tag
カスタムタグは {#domain.mytag/} で呼び出せます。
Template – Groovy extension
${ ['red', 'green', 'blue'].join('/') }
red/green/blue
${ (["red", "green", "blue"] as String[]).add('pink').join(' ') }
red green blue pink
${ (['red', 'green', 'blue'] as String[]).contains('green') }
true
${(['red', 'gr', 'blue'] as String[]).remove('gr').join(' ')}
red blue
${ ['red', 'green', 'blue'].last() }
blue
${ new Date(new Date().getTime() - 1000000).since() }
16 分前
${new Date(1275910970000).format('dd MMMM yyyy
hh:mm:ss')}
07 June 2010 01:42:50
${ 1275910970000.asdate('dd MMMM yyyy hh:mm:ss') }
07 June 2010 01:42:50
${726016L.formatSize()}
709KB
${ 42.formatCurrency('EUR').raw() }
€ 42.00
${ 42.page(10) }
5
journ${ ['cnn', 'c+', 'f2'].pluralize('al', 'aux') }
journaux
${ "lorum ipsum dolor".capAll() }
Lorum Ipsum Dolor
${ "lorum ipsum dolor".camelCase() }
LorumIpsumDolor
${ "lorum ipsum dolor".capFirst() }
Lorum ipsum dolor
${ "lorum ipsum dolor".cut('um') }
lor ips dolor
${ "The <blink>tag</blink> is evil".escape().raw() }
The <blink>tag</blink> is evil
${ "one\ntwo".nl2br() }
one<br/>two
${ '<' } ${ '<'.raw() }
< <
${ " (') (\") ".escapeJavaScript().raw() }
(\') (\")
${ "".yesno('yes', 'no') }
no
${ "not empty".yesno('yes', 'no') }
yes
${"Stéphane Épardaud".noAccents()}
Stephane Epardaud
${ "The Play! frameworkʼs manual".slugify() }
the-play-framework-s-manual
${ "x".pad(4).raw() }
x