Freemarkerとは
FreeMarkerは、Java言語で記述されたテンプレートエンジンであり、テンプレートに基づいてテキスト出力を生成します。FreeMarkerは、Webコンテナとは何の関係もありません。つまり、Webが実行されているときは、サーブレットまたはHTTPを認識しません。プレゼンテーション層の実現技術として使用できるだけでなく、XML 、JSP、またはJavaの生成にも使用できます。
1.はじめに割り当て命令この命令は、ページ上の変数を定義するために使用されます
1. Mavenプロジェクトを作成し、依存関係をインポートします。
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
2.resourcesフォルダーにtest.ftlテンプレートファイルを作成します。
<html>
<title>demo</title>
<meta charset="utf-8">
<body>
<!-- 这是一个注释 -->
${name}, ${message}
<br>
<!-- 定义简单类型 -->
<#assign linkman="曾先生"> 联系人:${linkman}
<!-- 定义对象类型 -->
<!assign info={"mobile":"1537767311*",'address':'湖北省武汉市'}> 电话:${info.mobile} 地址:${info.address}
</body>
</html>
3.Javaテストクラスを記述します。
package cn.cast.demo;
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) throws Exception {
//1.创建配置类
Configuration configuration=new Configuration(Configuration.getVersion());
//2.设置模板所在的目录 - test.ftl
configuration.setDirectoryForTemplateLoading(new File("D:\\MyProject\\Idea\\freemarkerDemo\\src\\main\\resources\\"));
//3.设置字符集
configuration.setDefaultEncoding("utf-8");
//4.加载模板
Template template = configuration.getTemplate("test.ftl");
//5.创建数据模型
Map map=new HashMap();
map.put("name", "张三 ");
map.put("message", "你好!");
//6.创建 Writer 对象 - 指定输出路径
Writer out =new FileWriter(new File("d:/test.html"));
//7.执行输出
template.process(map, out);
//8.关闭 Writer 对象
out.close();
}
}
4. Javaコードを実行して、指定したパスの下にtest.htmlページを生成します。ページの内容:
次の手順をMakefileします。
最初のステップ:構成オブジェクトを作成し、オブジェクトを直接新規作成します。構築方法のパラメータは、フリーマーカーのバージョン番号です。
ステップ2:テンプレートファイルが配置されているパスを設定します。
ステップ3:テンプレートファイルで使用される文字セットを設定します。通常はutf-8です。
ステップ4:テンプレートをロードし、テンプレートオブジェクトを作成します。
手順5:テンプレートで使用されるデータセットを作成します。データセットはpojoまたはmapです。一般的にマップ;
手順6:Writerオブジェクトを作成し、通常はFileWriterオブジェクトを作成して、生成されたファイルの名前を指定します。
手順7:テンプレートオブジェクトのprocessメソッドを呼び出して、ファイルを出力します。
手順8:ストリームを閉じます。
2. Includeディレクティブ このディレクティブは、テンプレートファイルのネストに使用されます
1.ファイルhead.ftlを作成して、ページをインポートします。
<h3>我是一个引入文件,可以被引入到其他模板</h3>
2.test.ftlテンプレート<body> </ body>にhead.ftlファイルを導入します。
<#include "head.ftl">
3.命令の場合
<#if success=true>
success 为 true, 我就显示出来.....
<#else>
success 为 false, 我就显示出来.....
</#if>
Javaテストクラスのマップコレクションに追加する必要があります。
map.put("success", true);
Four。listコマンド
<#list list as goods>
商品序号: ${goods_index+1} 商品名称: ${goods.name} 价格:${goods.price}<br>
</#list>
Javaテストクラスのマップコレクションに追加する必要があります。
//创建集合 - 往集合中添加多个商品
List list = new ArrayList();
Map goods1 = new HashMap();
goods1.put("name", "苹果");
goods1.put("price", 5.8);
Map goods2 = new HashMap();
goods2.put("name", "香蕉");
goods2.put("price", 2.5);
Map goods3 = new HashMap();
goods3.put("name", "橘子");
goods3.put("price", 3.2);
list.add(goods1);
list.add(goods2);
list.add(goods3);
//将商品集合存入 map 集合
map.put("list", list);
5.組み込み関数
1.商品の数量を取得します
<!-- 內建函数 -->
共 ${list?size} 件商品<#-- 获取商品 list 集合的长度 -->
2.json文字列をjsonオブジェクトに変換します
<!-- 定义一个 json 字符串 -->
<#assign studetn="{'name':'张三', 'age':'24', 'sex':'男'}" />
<!-- json 字符串转换成 json 对象 -->
<#assign stu=studetn?eval />
姓名: ${stu.name} 年龄: ${stu.age} 性别: ${stu.sex}
3.日付を取得します
<!-- 获取相关时间日期 -->
当前日期: ${today?date}
<br>
当前时间:${today?time}
<br>
当前日期+时间:${today?datetime}
<br>
日期格式化:
${today?string("yyyy年MM月")}
<br>
Javaテストクラスのマップコレクションに追加する必要があります。
map.put("today", new Date());
4.データを取得します
账户金额: ${money} 去除逗号: ${money?c}
Javaテストクラスのマップコレクションに追加する必要があります。
map.put("money", 200000000.00);
6. 変数が存在するかどうかを判断します
<!-- 判断 a b 变量是否存在 -->
<#if a??>
a 变量存在
<#else>
a 变量不存在
</#if>
<br>
${b!'b 变量不存在'}
セブン。オペレーター
<!-- 比较 -->
<#if (money > 1000000) >
富豪
</#if>
<br>
<#if money lt 100 >
穷鬼
</#if>
1.算術演算子
算術演算は、完全にサポートされているFreeMarkerのを表現算術演算子。でサポートされているFreeMarkerのは含ま:+、 - 、*、/、%。
2.論理演算子
論理AND :&& 論理OR :||論理NOT :!
論理演算子は、ブール値に基づいて行動することができ、 それ以外の場合はエラーが発生します。
3.比較演算子
式でサポートされている比較演算子は次のとおりです。
- = または ==: 2つの値が等しいかどうかを判断します;
- !=: 2つの値が等しくないかどうかを判断します。;
- > またはgt: 左側の値が右側の値より大きいかどうかを判別します。
- > = またはgte: 左側の値が右側の値以上であるかどうかを判別します。
- < またはlt: 左側の値が右側の値よりも小さいかどうかを判別します。
- <= またはlte: 左側の値が右側の値以下であるかどうかを判別します。
注:= と != 文字列に使用することができ、 それらが等しいかどうかを比較するために、数値や日付、 しかし の両側= と =! 値の同じ型でなければならない、そうでない場合はエラーが発生します、 とFreeMarkerのは正確です比較、「X」、「X」、「X」 に等しいではありません。 他の事業者は、数値や日付に基づいて行動することができ、 文字列の上ではなく。 ほとんどの時間は、 使用して のようなアルファベットの演算子をGT の代わりに >は、 より良い効果があります、ので、FreeMarkerのはウィル 解釈> などの終了文字FTLのタグ。 もちろん、 ブラケットには、このような状況を回避するために使用することができ、など :<#if(x> y)>
コードのダウンロード:https: //pan.baidu.com/s/1wyHldU4RpB0UFNdSKj4wmQ
***このコードはjdk1.8で実行および使用する必要があります***