Beetlフロントエンドレンダリング
6618 ワード
当ブログは、Beetl取扱説明書に転載しております
基本構成
基本構成
GroupTemplate
Beetlの核心はGroupTemplateで、GroupTemplateを作成するには2つのパラメータが必要です.1つはテンプレートリソースローダで、1つは構成クラスで、テンプレートリソースローダBeetlには4種類が内蔵されています.
StringTemplateResourceLoader:この例で示すように、文字列テンプレートをロードする文字列テンプレートローダ
FileResourceLoader:ファイルテンプレートローダは、ルートディレクトリをパラメータとして構築する必要があります.getTemplateメソッドに転送されるStringは、Rootディレクトリに対するテンプレートファイルの相対パスです.
ClasspathResourceLoader:ファイルテンプレートローダ、テンプレートファイルClasspathにあるWebAppResourceLoader:Webapp統合用、テンプレートルートディレクトリがWebRootディレクトリであると仮定し、web統合章を参照
MapResourceLoader:テンプレートに動的に格納可能
コード5行目は変数nameをテンプレートに入力し、その値は「Beetl」です.コードの6行目はテンプレートをレンダリングして出力を得て、templateは多種のレンダリング出力を得る方法を提供して、以下の通りです
tempalte.render()は、この例に示すのようにレンダリング結果を返します.
template.renderTo(Writer)レンダリング結果はWriterに出力されますtemplate.renderTo(OutputStream)レンダリング結果OutputStreamに出力StringTemplateResourceLoader resourceLoader = new StringTemplateResourceLoader();
Configuration cfg = Configuration.defaultConfiguration();
GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);
Template t = gt.getTemplate("hello,${name}");
t.binding("name", "beetl");
String str = t.render();
System.out.println(str);
テンプレートの基礎構成
2行目の構成エンジン実装クラスは、デフォルトでよい.
3,4行目は占有記号を指定し,デフォルトは${}である.他のプレースホルダとして指定することもできます.
5,6行目は文の境界記号を指定します.デフォルトは、他の境界記号として指定することもできます.
7行目はIO出力モードを指定し、デフォルトはFALSE、すなわち通常の文字出力であり、高性能を考慮してtrueに設定することができる.詳細については、高度な使い方を参照してください
8行目、9行目はHTMLタグをサポートすることを指定し、記号は#で、デフォルトの構成では、テンプレートエンジンはタグ>のようなhtmlタグを識別し、対応するタグ関数またはテンプレートファイルを呼び出すことができます.bgのように別の記号を指定することもできます.
10行目ラベル属性にvarがある場合、テンプレートに変数をバインドする必要があると判断するラベル関数を指定します.
11行目ローカルClassダイレクトコールの許可
12行目指定テンプレート文字セットはUTF-8
13行目は異常の解析クラスを指定し、デフォルトはConsoleErrorHandlerで、renderに異常が発生したときにバックグラウンドにエラーメッセージ(System.out)を印刷します.
14行目は、ローカルClass呼び出しのセキュリティポリシーを指定します.
15行目に厳密なMVCを行うか否かが設定、通常、ここではfalseに設定.
18行目は、デフォルトで使用されるテンプレートリソースローダを指定します.
20~22行目には、ルートパス/つまりClasspathの最上位パスを設定し、常にテンプレートが変更されているかどうかを検出するなど、テンプレートエクスプローラのプロパティが設定されています.
23行目には、カスタムメソッドが存在するディレクトリとファイル名の接尾辞が構成されています.beetlはjavaクラス定義メソッドとテンプレートファイルによるメソッドの定義をサポートします
26行目には、カスタムhtmlラベルがあるディレクトリとファイル名接尾辞が構成されています.beetlはjavaクラスでラベルを定義することも、テンプレートファイルでラベルを定義することもサポートします.
31行目にはdateメソッドが登録されているが、現クラスはorgである.beetl.ext.fn.DateFunction
34行目にメソッドパッケージstrutilが登録され、クラスorgが現れる.beetl.ext.fn.StringUtil、このようなpublicメソッドごとにbeetlとして登録されるメソッド
37行目に日付フォーマット関数が登録されています
40行目にincludeラベル関数が登録されています#
ENGINE=org.beetl.core.engine.FastRuntimeEngine
DELIMITER_PLACEHOLDER_START=${
DELIMITER_PLACEHOLDER_END=}
DELIMITER_STATEMENT_START=
DIRECT_BYTE_OUTPUT = FALSE
HTML_TAG_SUPPORT = true
HTML_TAG_FLAG = #
HTML_TAG_BINDING_ATTRIBUTE = var
NATIVE_CALL = TRUE
TEMPLATE_CHARSET = UTF-8
ERROR_HANDLER = org.beetl.core.ConsoleErrorHandler
NATIVE_SECUARTY_MANAGER= org.beetl.core.DefaultNativeSecurityManager
MVC_STRICT = FALSE
\# ,resource ResourceLoader
RESOURCE_LOADER=org.beetl.core.resource.ClasspathResourceLoader
#classpath
RESOURCE.root= /
#
RESOURCE.autoCheck= true
# Root
RESOURCE.functionRoot = functions
RESOURCE.functionSuffix = html
# Root
RESOURCE.tagRoot = htmltag
RESOURCE.tagSuffix = tag
##### ##############
##
FN.date = org.beetl.ext.fn.DateFunction
......
##
FNP.strutil = org.beetl.ext.fn.StringUtil
......
##
FTC.java.util.Date = org.beetl.ext.format.DateFormat
.....
##
TAG.include= org.beetl.ext.tag.IncludeTag
基本的な使い方
デリミタとプレースホルダ
Beetlテンプレート言語はJS言語や慣習に似ており、Beetl言語を境界記号に入れるだけでよい.デフォルトでは、プレースホルダは静的テキストにプレースホルダを埋め込んで出力するために使用され、以下が正しい例である.
hello 2+3=${result}
式がデリミタと競合している場合は、式に「」記号を使用します.${[1,2,3]} // json
${ {key:1,value:2 \} } // json map,} \
グローバル変数定義
グローバル変数はtemplate.bindingが入力した変数で、これらの変数はテンプレートの任意の場所で、サブテンプレートを含めてアクセスできます.Javaコードのようにtemplate.binding("list",service.getUserList());
//
hello,${user.name};
共有変数
共有変数とは、すべてのテンプレートで参照できる変数を指し、groupTemplate.setSharedVars(MapsharedVars)が入力する変数.これらの変数は、すべてのテンプレートの任意の場所で使用できます.GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);
Map shared = new HashMap();
shared.put("name", "beetl");
gt.setSharedVars(shared);
Template t = gt.getTemplate("/org/beetl/sample/s0208/t1.txt");
String str = t.render();
System.out.println(str);
t = gt.getTemplate("/org/beetl/sample/s0208/t2.txt");
str = t.render();
System.out.println(str);
//t1.txt
hi,${name}
//t2.txt
hello,${name}
参照プロパティ
属性参照はテンプレートの重要な部分であり、beetlサポート属性はjavascriptのサポート方式と同様に、以下のようになっています.
1 Beetlサポートパス」javascriptと同じ場合、オブジェクトのプロパティにアクセスします.UserオブジェクトにgetName()メソッドがある場合は、テンプレートに${xxx.name}でアクセスできます.
2テンプレート変数が配列またはListクラスの場合、${userList[0]}などの[]からアクセスできます.
3テンプレート変数がMapクラスである場合、${map["name"]}のように[]でアクセスすることができ、key値が文字列タイプである場合、${map.name}を使用することもできる.テンプレート読者がPojoオブジェクトだと勘違いするので、このような使用はお勧めしません.
4 Beetlは、オブジェクトにpublic Object get(String key)メソッドがある場合に使用できるGeneric Get方式もサポートする.番号または[]でアクセスします.たとえば、${activityRecord.name}または${activityRecord["name"}は、activityRecordのget(String key)メソッドを呼び出します.オブジェクトに特定の属性とGeneric getがある場合(このモデルの設計方式は奨励に値しない)、特定の属性の優先度が高い.
5 Beetlは、${user["name"]}が${user.name}に相当するなどの属性を[]で参照することもできる.これはjavascriptと一致しています.しかし、テンプレートを読む人にMapタイプだと誤解されやすいので、そうしないことをお勧めします.
6 Beetlはjavaオブジェクトを変更することなく、追加のオブジェクト属性を配置することもできます.これは仮想属性と呼ばれ、例えば、すべての集合に対して配列に共通のsizeがあります.仮想属性は「.~」+仮想属性名template.binding("list",service.getUserList());
template.binding("pageMap",service.getPage());
//
${list.~size}
hello,${user.name};
${pageMap['page']}, ${pageMap["total"]}
StringTemplateResourceLoader resourceLoader = new StringTemplateResourceLoader();
Configuration cfg = Configuration.defaultConfiguration();
GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);
Template t = gt.getTemplate("hello,${name}");
t.binding("name", "beetl");
String str = t.render();
System.out.println(str);
#
ENGINE=org.beetl.core.engine.FastRuntimeEngine
DELIMITER_PLACEHOLDER_START=${
DELIMITER_PLACEHOLDER_END=}
DELIMITER_STATEMENT_START=
DIRECT_BYTE_OUTPUT = FALSE
HTML_TAG_SUPPORT = true
HTML_TAG_FLAG = #
HTML_TAG_BINDING_ATTRIBUTE = var
NATIVE_CALL = TRUE
TEMPLATE_CHARSET = UTF-8
ERROR_HANDLER = org.beetl.core.ConsoleErrorHandler
NATIVE_SECUARTY_MANAGER= org.beetl.core.DefaultNativeSecurityManager
MVC_STRICT = FALSE
\# ,resource ResourceLoader
RESOURCE_LOADER=org.beetl.core.resource.ClasspathResourceLoader
#classpath
RESOURCE.root= /
#
RESOURCE.autoCheck= true
# Root
RESOURCE.functionRoot = functions
RESOURCE.functionSuffix = html
# Root
RESOURCE.tagRoot = htmltag
RESOURCE.tagSuffix = tag
##### ##############
##
FN.date = org.beetl.ext.fn.DateFunction
......
##
FNP.strutil = org.beetl.ext.fn.StringUtil
......
##
FTC.java.util.Date = org.beetl.ext.format.DateFormat
.....
##
TAG.include= org.beetl.ext.tag.IncludeTag
デリミタとプレースホルダ
Beetlテンプレート言語はJS言語や慣習に似ており、Beetl言語を境界記号に入れるだけでよい.デフォルトでは、プレースホルダは静的テキストにプレースホルダを埋め込んで出力するために使用され、以下が正しい例である.
hello 2+3=${result}
式がデリミタと競合している場合は、式に「」記号を使用します.
${[1,2,3]} // json
${ {key:1,value:2 \} } // json map,} \
グローバル変数定義
グローバル変数はtemplate.bindingが入力した変数で、これらの変数はテンプレートの任意の場所で、サブテンプレートを含めてアクセスできます.Javaコードのように
template.binding("list",service.getUserList());
//
hello,${user.name};
共有変数
共有変数とは、すべてのテンプレートで参照できる変数を指し、groupTemplate.setSharedVars(MapsharedVars)が入力する変数.これらの変数は、すべてのテンプレートの任意の場所で使用できます.
GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);
Map shared = new HashMap();
shared.put("name", "beetl");
gt.setSharedVars(shared);
Template t = gt.getTemplate("/org/beetl/sample/s0208/t1.txt");
String str = t.render();
System.out.println(str);
t = gt.getTemplate("/org/beetl/sample/s0208/t2.txt");
str = t.render();
System.out.println(str);
//t1.txt
hi,${name}
//t2.txt
hello,${name}
参照プロパティ
属性参照はテンプレートの重要な部分であり、beetlサポート属性はjavascriptのサポート方式と同様に、以下のようになっています.
1 Beetlサポートパス」javascriptと同じ場合、オブジェクトのプロパティにアクセスします.UserオブジェクトにgetName()メソッドがある場合は、テンプレートに${xxx.name}でアクセスできます.
2テンプレート変数が配列またはListクラスの場合、${userList[0]}などの[]からアクセスできます.
3テンプレート変数がMapクラスである場合、${map["name"]}のように[]でアクセスすることができ、key値が文字列タイプである場合、${map.name}を使用することもできる.テンプレート読者がPojoオブジェクトだと勘違いするので、このような使用はお勧めしません.
4 Beetlは、オブジェクトにpublic Object get(String key)メソッドがある場合に使用できるGeneric Get方式もサポートする.番号または[]でアクセスします.たとえば、${activityRecord.name}または${activityRecord["name"}は、activityRecordのget(String key)メソッドを呼び出します.オブジェクトに特定の属性とGeneric getがある場合(このモデルの設計方式は奨励に値しない)、特定の属性の優先度が高い.
5 Beetlは、${user["name"]}が${user.name}に相当するなどの属性を[]で参照することもできる.これはjavascriptと一致しています.しかし、テンプレートを読む人にMapタイプだと誤解されやすいので、そうしないことをお勧めします.
6 Beetlはjavaオブジェクトを変更することなく、追加のオブジェクト属性を配置することもできます.これは仮想属性と呼ばれ、例えば、すべての集合に対して配列に共通のsizeがあります.仮想属性は「.~」+仮想属性名
template.binding("list",service.getUserList());
template.binding("pageMap",service.getPage());
//
${list.~size}
hello,${user.name};
${pageMap['page']}, ${pageMap["total"]}