Freemarkerの基礎知識(1)
6429 ワード
プロジェクトではFreemarkerに一定の使用量があるので、ここではFreemarkerの基礎知識をまとめます.
Freemarkerとは何ですか.FreeMarkerはテンプレートベースの出力テキスト(HTML形式の文からソースコードを自動的に生成する)を生成するための汎用ツールです.FreeMarkerは、テンプレートを使用してテキストページを生成するだけで、準備されたデータを表示します.
FreeMarker学習の過程で,その構文構造はシーケンスのようなPythonと大きく類似していることが分かった.
1.例
上記のコードについて、HTMLコードやStruts 2のOGLLやjavaのEL式が読める場合、この数行のコードは本当に小さいcaseです.
2.テンプレート
Freemarkerのテンプレートコンポーネント:テキスト、上の$のような補間(interpolations)、FTLラベルにコメントを付けます.<#--と-->
2.1 if命令
<#if a.count< 1>
2.2 list命令
<#list sequence as loopVariable>repeatThis
2.3 include指令
includeコマンドを使用すると、現在のテンプレートに他のファイルの内容を挿入できます.
<#include "/a.html">
2.4処理に変数が存在しない
1. 初期値は存在しません
Welcome ${user!"a"}!
Freemarkerとは何ですか.FreeMarkerはテンプレートベースの出力テキスト(HTML形式の文からソースコードを自動的に生成する)を生成するための汎用ツールです.FreeMarkerは、テンプレートを使用してテキストページを生成するだけで、準備されたデータを表示します.
FreeMarker学習の過程で,その構文構造はシーケンスのようなPythonと大きく類似していることが分かった.
1.例
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>Our latest product:
<a href="${a.url}">${a.name}</a>!
</body>
</html>
上記のコードについて、HTMLコードやStruts 2のOGLLやjavaのEL式が読める場合、この数行のコードは本当に小さいcaseです.
2.テンプレート
Freemarkerのテンプレートコンポーネント:テキスト、上の$のような補間(interpolations)、FTLラベルにコメントを付けます.<#--と-->
2.1 if命令
<#if a.count< 1>
0;
<#else>
1;
</#if>
2.2 list命令
<#list sequence as loopVariable>repeatThis
2.3 include指令
includeコマンドを使用すると、現在のテンプレートに他のファイルの内容を挿入できます.
<#include "/a.html">
2.4処理に変数が存在しない
1. 初期値は存在しません
Welcome ${user!"a"}!
2. 無視されたコードセグメントは存在しません
<#if user??>Welcome ${user}!
??返される値はtrueまたはfalseです
3. 値
シーケンス:[[foo],[bar],123.45%,1..100
ハッシュ表:{"name":"green mouse","price":150}
ハッシュ・テーブルからのデータの取得:user.name, user[“name”]
シーケンス分割:products[10.1.19]とPythonが似ているのは、正逆シーケンスで遍歴できるからである.
理解すべき知識:
エスケープシーケンスの意味
引用符(u 0022)
'単一引用符(アポストロフィとも呼ばれる)(u 0027)
\スラッシュ(u 005 C)
改行(u 000 A)
rリターン(u 000 D)
t水平タブ(ラベルとも呼ばれる)--tab
bチェックアウト(u 0008)--backspace
fページング(u 000 C)
l小なり:<--less
gサイズより大きい:>
aと番号:&--and
3.1シーケンス
この例はlist命令と結びつけて見ることができる
<#list ["winter", "spring", "summer", "autumn"] as x> ${x}
</#list>
3.2ハッシュ表操作
次の例のキー値は同じですが、優先は右側です.
<#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>
- Joe is ${ages.Joe} -- 30
- Fred is ${ages.Fred}
- Julia is ${ages.Julia}
3.3=および!=
JAvaでは2つのオブジェクトが等しいかどうかを判断するには=,Freemarker用=でよい.
>または>=を用いた場合,問題が発生しないのか,この解析の際には終了符として扱われない.したがって,この場合,gtで代用>,gteで代用>=,より小さい場合には,問題が発生する可能性もある.たとえば論理と操作を用いた場合,このとき解析は開始子と誤認される可能性がある.したがって、ltを<、lteを<=に置き換えることができる.
3.4論理操作
ロジックまたは:|ロジックと:&&ロジック非:!
3.5組み込み関数(有用なもの)
フォーマット:文字列の大文字:user?upper_case、相当?意味表示の意味がわかります.
一般的な組み込み関数:
html:文字列内のすべての特殊なHTML文字は、<代替<)などのエンティティ参照で置き換える必要があります.
cap_first:文字列の最初のアルファベットが大文字になります
lower_case:文字列の小文字
upper_case:文字列の大文字
trim:文字列の先頭と末尾のスペースを削除する
size:シーケンス内の要素の数
int:数字の整数部分(例えば-1.9?intは-1)
3.6メソッド呼び出し
文字列を作成回数だけコピーするためのrepartStrの方法が現在あります.
${repeatStr("What", 3)}
4. ツールバーの
4.1カスタム命令
カスタムコマンドはmacroコマンドを使用して定義できます.これはテンプレート設計者が関心を持っている内容です.Javaプログラマはテンプレートで命令を実現するのではなく、Java言語で命令を実現するにはfreemarkerを使用することができる.template.TemplateDirectiveModelクラスを拡張します.
4.1.1マクロ
マクロは変数名のテンプレートクリップです.テンプレートでマクロをカスタムコマンドとして使用すると、重複した作業が可能になります.
<#macro greet>
<font size="+2">Hello Joe!</font>
</#macro>
呼び出し方法は<@greet>
4.2カスタム命令パラメータ
<#macro greet person color>
<font size="+2" color="${color}">Hello ${person}!</font>
</#macro>
では、どうやって呼び出しましたか.
<@greet person="Fred"color="black"/>
両方のパラメータを構成しなければならないことを覚えておいてください.そうしないと説明できません.もちろん、マクロ定義時に初期値を設定できます.たとえば
<#macro greet person color="black">
FTL式規則によってsomeParam=fooとsomeParam=「${foo}」は異なる.1つ目は,変数fooの値をパラメータの値として用いる.2つ目は補間形式の文字列を用いる場合であり,パラメータ値は文字列であり,someParamすなわち文字列に与えられる.
4.3ネスト
個人的な感覚では、ネストして使用するとwhileループに相当します.命令は<#nested>であり、開始フラグ命令と終了フラグ命令との間にあるテンプレートコードセグメントを実行する
<#macro do_thrice>
<#nested>
<#nested>
<#nested>
</#macro>
<@do_thrice>
a.
</@do_thrice>
運行結果は3つのa.ですね.
4.4マクロと循環変数
<#macro repeat count>
<#list 1..count as x>
<#nested x, x/2, x==count>
</#list>
</#macro>
<@repeat count=4 ; c, halfc, last>
${c}. ${halfc}<#if last> Last!</#if>
</@repeat>
出力された結果は次のとおりです.
1. 0.5
2. 1
3. 1.5
4. 2 Last!
よく理解できるでしょう.例えば、上の1からcount=4の値をxに与えてループさせ、得られるxにはいくつかの処理があります.x、x/2、x=count
次に呼び出され、呼び出された変数が使用されます.を選択します.変数とループパラメータの順序に注意してください.
4.5変数
1. 単純変数.これらの変数をassignまたはmacroコマンドで作成または置換する
2.ローカル変数.マクロ定義体内に設定され、localコマンドを使用してマクロ定義体内でローカル変数を作成または置換します.サイクルマクロの呼び出しプロセスを使用します.
3.循環変数リストなどのコマンドによって自動的に作成され、コマンドの開始フラグと終了フラグ内でのみ有効です.
<#assign x=1>単純変数
<#list["loop"]as x>ループ変数
4.6ネーミングスペース<#macro copyright date>
<p>Copyright (C) ${date} Julia Smith. All rights reserved.
<br>Email: ${mail}</p>
</#macro>
<#import "/lib/my_test.ftl" as my>
<#assign mail="[email protected]">
<@my.copyright date="1999-2002"/> //
${my.mail}
${mail}
上のコードを見ると、2つの異なるネーミングスペースに属していることがわかります.自分のftlファイルを直接呼び出せばいいですが、導入したftlファイルのネーミングスペースはmyなので、myで関数と変数を呼び出すことができます.たまに含まれるネーミングスペースに変数を作成または置換したい場合.以下の方式を採用する<#import "/lib/my_test.ftl" as my>
${my.mail}
<#assign mail="[email protected]" in my>
${my.mail}
:
[email protected]
[email protected]
??返される値はtrueまたはfalseです
3. 値
シーケンス:[[foo],[bar],123.45%,1..100
ハッシュ表:{"name":"green mouse","price":150}
ハッシュ・テーブルからのデータの取得:user.name, user[“name”]
シーケンス分割:products[10.1.19]とPythonが似ているのは、正逆シーケンスで遍歴できるからである.
理解すべき知識:
エスケープシーケンスの意味
引用符(u 0022)
'単一引用符(アポストロフィとも呼ばれる)(u 0027)
\スラッシュ(u 005 C)
改行(u 000 A)
rリターン(u 000 D)
t水平タブ(ラベルとも呼ばれる)--tab
bチェックアウト(u 0008)--backspace
fページング(u 000 C)
l小なり:<--less
gサイズより大きい:>
aと番号:&--and
3.1シーケンス
この例はlist命令と結びつけて見ることができる
<#list ["winter", "spring", "summer", "autumn"] as x>
${x}
</#list>
3.2ハッシュ表操作
次の例のキー値は同じですが、優先は右側です.
<#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>
- Joe is ${ages.Joe} -- 30
- Fred is ${ages.Fred}
- Julia is ${ages.Julia}
3.3=および!=
JAvaでは2つのオブジェクトが等しいかどうかを判断するには=,Freemarker用=でよい.
>または>=を用いた場合,問題が発生しないのか,この解析の際には終了符として扱われない.したがって,この場合,gtで代用>,gteで代用>=,より小さい場合には,問題が発生する可能性もある.たとえば論理と操作を用いた場合,このとき解析は開始子と誤認される可能性がある.したがって、ltを<、lteを<=に置き換えることができる.
3.4論理操作
ロジックまたは:|ロジックと:&&ロジック非:!
3.5組み込み関数(有用なもの)
フォーマット:文字列の大文字:user?upper_case、相当?意味表示の意味がわかります.
一般的な組み込み関数:
html:文字列内のすべての特殊なHTML文字は、<代替<)などのエンティティ参照で置き換える必要があります.
cap_first:文字列の最初のアルファベットが大文字になります
lower_case:文字列の小文字
upper_case:文字列の大文字
trim:文字列の先頭と末尾のスペースを削除する
size:シーケンス内の要素の数
int:数字の整数部分(例えば-1.9?intは-1)
3.6メソッド呼び出し
文字列を作成回数だけコピーするためのrepartStrの方法が現在あります.
${repeatStr("What", 3)}
4. ツールバーの
4.1カスタム命令
カスタムコマンドはmacroコマンドを使用して定義できます.これはテンプレート設計者が関心を持っている内容です.Javaプログラマはテンプレートで命令を実現するのではなく、Java言語で命令を実現するにはfreemarkerを使用することができる.template.TemplateDirectiveModelクラスを拡張します.
4.1.1マクロ
マクロは変数名のテンプレートクリップです.テンプレートでマクロをカスタムコマンドとして使用すると、重複した作業が可能になります.
<#macro greet>
<font size="+2">Hello Joe!</font>
</#macro>
呼び出し方法は<@greet>
4.2カスタム命令パラメータ
<#macro greet person color>
<font size="+2" color="${color}">Hello ${person}!</font>
</#macro>
では、どうやって呼び出しましたか.
<@greet person="Fred"color="black"/>
両方のパラメータを構成しなければならないことを覚えておいてください.そうしないと説明できません.もちろん、マクロ定義時に初期値を設定できます.たとえば
<#macro greet person color="black">
FTL式規則によってsomeParam=fooとsomeParam=「${foo}」は異なる.1つ目は,変数fooの値をパラメータの値として用いる.2つ目は補間形式の文字列を用いる場合であり,パラメータ値は文字列であり,someParamすなわち文字列に与えられる.
4.3ネスト
個人的な感覚では、ネストして使用するとwhileループに相当します.命令は<#nested>であり、開始フラグ命令と終了フラグ命令との間にあるテンプレートコードセグメントを実行する
<#macro do_thrice>
<#nested>
<#nested>
<#nested>
</#macro>
<@do_thrice>
a.
</@do_thrice>
運行結果は3つのa.ですね.
4.4マクロと循環変数
<#macro repeat count>
<#list 1..count as x>
<#nested x, x/2, x==count>
</#list>
</#macro>
<@repeat count=4 ; c, halfc, last>
${c}. ${halfc}<#if last> Last!</#if>
</@repeat>
出力された結果は次のとおりです.
1. 0.5
2. 1
3. 1.5
4. 2 Last!
よく理解できるでしょう.例えば、上の1からcount=4の値をxに与えてループさせ、得られるxにはいくつかの処理があります.x、x/2、x=count
次に呼び出され、呼び出された変数が使用されます.を選択します.変数とループパラメータの順序に注意してください.
4.5変数
1. 単純変数.これらの変数をassignまたはmacroコマンドで作成または置換する
2.ローカル変数.マクロ定義体内に設定され、localコマンドを使用してマクロ定義体内でローカル変数を作成または置換します.サイクルマクロの呼び出しプロセスを使用します.
3.循環変数リストなどのコマンドによって自動的に作成され、コマンドの開始フラグと終了フラグ内でのみ有効です.
<#assign x=1>単純変数
<#list["loop"]as x>ループ変数
4.6ネーミングスペース
<#macro copyright date>
<p>Copyright (C) ${date} Julia Smith. All rights reserved.
<br>Email: ${mail}</p>
</#macro>
<#import "/lib/my_test.ftl" as my>
<#assign mail="[email protected]">
<@my.copyright date="1999-2002"/> //
${my.mail}
${mail}
上のコードを見ると、2つの異なるネーミングスペースに属していることがわかります.自分のftlファイルを直接呼び出せばいいですが、導入したftlファイルのネーミングスペースはmyなので、myで関数と変数を呼び出すことができます.たまに含まれるネーミングスペースに変数を作成または置換したい場合.以下の方式を採用する
<#import "/lib/my_test.ftl" as my>
${my.mail}
<#assign mail="[email protected]" in my>
${my.mail}
:
[email protected]
[email protected]