Groovy templates

javaコードみたいにHTMLが書ける

thymeleafなどと干渉しない

注、 このページのタグ表示の不等号の後にスペースがあるのは(< p>< /p>), 雑なエスケープのためで、 実際タグを有効にする場合はスペースを埋めて書く。

あくまでテンプレエンジンのこと

宣言

yieldUnescaped '< !DOCTYPE html>'

String str = "javaの型も使える";
html() {
    body() {
        p(id:"xx", "hello");
        p(id:"yy", str);
    }
}

include

include template:"xxx.tpl";
include escaped:"yyy.txt"; //HTML要素を全てエスケープ処理する
include unescaped:"zzz.txt"; //HTML要素としてレンダリングする

以下test.tpl

template:"tplファイル"

escaped:"txtファイル"//html要素をエスケープする

<p>sssss</p> <br> <p>ggggg</p>

unescaped:"txtファイル"//html要素としてレンダリング

sssss


ggggg

if文

if( 条件式 ) { 処理 } else { 処理 }

forEach文

java:   String[] strs = { "xx", "yy" };
tpl:    strs.each { val ->
            p( val );
        }

for fragmentメソッド

変数と結合

java:   mav.attribute("key", "同じ結果");
tpl:    p(key + "だよ");
        p("${key}だよ");

トリプルダブルクォート文字列

doctype宣言下では多分どこでも使用できる。
しかし、layout.tplに渡す側のファイルの平場? カッコに囲まれていないような場で書くとエラー。
MAVから渡すもあり。

TDQSでゴリ押し

groovy記法がわからない場合もあって、特にpre()のテキストで重宝する。 他に、たとえば< style>タグを使おうとした時 < style scoped="scoped"> div { border: 2px solid rgba(1,1,1,1); } < /style> これをgroovyで、 style(scoped:"scoped") { div{} } と書いたり style(scoped:"scoped", "div{}") と書いたりしてみても うまくいかないのでTDQSで書く。

タグの共食い

javaコードみたいにHTMLが書ける

Groovy templates

javaコードみたいにHTMLが書ける だよ

javaコードみたいにHTMLが書けるだよ

javaコードみたいにHTMLが書ける だよ

thymeleafなどと干渉しない

間違えてthis.tplをインクルードすると(自分で自分をインクルード)、ここで無限ループが始まる


以下test.tpl

template:"tplファイル"

escaped:"txtファイル"//html要素をエスケープする

<p>sssss</p> <br> <p>ggggg</p>

unescaped:"txtファイル"//html要素としてレンダリング

sssss


ggggg

<p>sssss</p> <br> <p>ggggg</p>

if文

flag: false.

groovy:p(class:"name", item) = html: < p class="name">item< /p>

for文

for fragmentメソッド

たぶん公式

https://groovy-lang.org/templating.html#_creation_of_a_template_engine

[yieldUnescaped]はdoctype宣言と呼ばれ、他に何種類かある。

html以外にもXMLなども対象

htmlではマークアップしない文字も表示されるが、groovyだとエラーにはならないが表示もされない

li()はセミコロンで区切れば(セミコロン要らないかも)複数入る

ol(){}波括弧内でコンマは使えない。セミコロンは使っても使わなくてもいい

2023,秋現在、groovyの日本語版書籍は見当たらず。Webサイトでも情報が少ないので待ち遠しい

属性名にハイフンがある場合シングルクォートで囲む'stroke-width'