自己记的freemarker笔记,分享出来学习
本帖最后由 z1109079622 于 2021-2-15 18:29 编辑# freemarker 网页显示有点问题,我把源文件放到附件里了
## 一、数据类型
### 1.布尔型
```
布尔类型不能直接输出,要先转化为字符串
```
- `?c`
- `?string`
`${flag?string("yes","no")}`:如果flag的值是true,那值就是yes,如果是false那值就是no
### 2.日期类型
```
布尔类型不能直接输出,要先转化为日期类型或字符串
```
- `?date`:年月日
- `?time`:时分秒
- `?datetime`:年月日时分秒
- `?string("自定义日期格式")`:yyyy-MM-dd HH-mm-ss
`${createDate?string("yyyy年MM月dd日 HH:mm:ss")}`
### 3.数值类型
```
数值类型可以直接输出
```
#### 转字符串
- `?c`:转普通字符串
- `?string.currency`:货币型字符串
- `?string.percent`:百分比型字符串
#### 保留浮点型数值指定小数位
- `?string["0.##"]`
`${avg?string["0.##"]}`:保留小数点后两位
### 4.字符串类型
#### 常用api
- `?substring(start,end)`:截取字符串(左闭右开)
- `?uncap_first`:首字母小写输出
- `?cap_first`:首字母大写输出
- `?lower_case`:字母转小写
- `?upper_case`:字母转大写
- `?length`:获取字符串长度
- `?starts_with("A")?string`:是否以指定字符串开头(boolean)
- `?ends_with("B")?string`:是否以指定字符串结尾(boolean)
- `?index_of("AAA")`:获取指定字符处的索引
- `?trim`:去除字符串前后空格
- `?replace("A","B")`:替换指定字符串
#### 字符串空值的处理
```
FreeMarker的变量必须赋值,否则就会抛出异常。而对于 FreeMarker来说,null值和不存在的变量是完全一样
的,因为 FreeMarker无法理解 null值
```
##### "!"指定确实变量的默认值
`${value!"默认值"}`:如果value值为空,那默认值是字符串:默认值
##### "??"判断变量是否存在
`${(value??)?string}`:如果变量存在,就返回true,不存在就返回false
### 5.sequence序列类型
```
数组、list、set
```
#### 输出
使用**#list**进行输出
```xml
${元素名}
```
#### api
- `${序列名?size}`:获取序列的长度
- `${序列名?index}`:获取序列元素的下标
- `${序列名?first}`:获取第一个元素
- `${序列名?last}`:获取最后一个元素
- `${序列名?join(",")}`:以","分隔 把数组拼成一个字符串
- ` `:倒序输出
- ` `:升序输出
- ` `:降序输出
#### 如果list集合元素是JavaBean
**JavaBean**对象的属性一定要有对应的get方法才能获取对应的值
```xml
${user.id}
```
按照指定字段排序
```xml
${user.id}
```
### 6.hash类型
```
Map集合
也是用list标签输出
```
- 获取key并通过key获取value
```
${key}
${hash}
```
- 直接获取map的value
```
${value}
```
## 二、常用指令
### assign
```
使⽤assign指令你可以创建⼀个新的变量, 或者替换⼀个已经存在的变量。
```
```
(可以定义多个变量)
```
### 逻辑判断指令
**注:小于是lt、 大于是gt、大于等于是gte、 小于等于是lte**
```
...
...
...
...
```
### list
- ```
```
- ```
当没有选项时,执⾏else指令
```
### macro 自定义指令
- 不带参数的
```
格式:
指令内容
使⽤:
```
- 带参参数的
```
格式:
指令内容
使⽤:
```
### nested占位符
```
可以将⾃定义指令中的内容通过nested指令占位,当使⽤⾃定义指令时,会将占位内容显示。
```
```
这是⼀段⽂本!
这是⽂本后⾯的内容!
```
### import
```
导入其他flt的命名空间,就可以使用命名空间中定义的宏和方法了
```
```
```
### include
```
在freemarker中插入整个页面。html文件或者freemarker文件都可以
```
## 三、FreeMarker页面静态化
```
用于输出html
可以把数据库中的数据写入到html中,用于内容不经常改变的页面
```
- 服务器
```java
// 实例化模板配置对象
Configuration configuration = new Configuration();
// 设置加载模板的上下⽂ 以及 设置加载模板路径(模板存放的路径)
configuration.setServletContextForTemplateLoading(getServletContext(),"/template");
// 设置模板的编码格式
configuration.setDefaultEncoding("UTF-8");
// 加载模板⽂件,获取模板对象
Template template = configuration.getTemplate("news.ftl");
// 设置模型数据
Map map = new HashMap();
map.put("title", "特别就业季:稳就业情况如何? 哪些问题待解?");
map.put("source", "⼈⺠⽇报");
map.put("pubTime", new Date());
map.put("content", "中共中央政治局常务委员会近⽇召开会议强调," +
"要有针对性地开展援企、稳岗、扩就业⼯作," +
"做好⾼校毕业⽣、农⺠⼯等重点群体就业⼯作," +
"积极帮助个体⼯商户纾困。疫情期间,稳就业情况如何?还有哪些问题待解?" +
"记者采访了不同群体,记录这个特别的就业季。");
// 获取项⽬所在的根⽬录
String basePath = request.getServletContext().getRealPath("/");
// 设置⻚⾯存放的⽬录
File htmlFile = new File(basePath + "/html");
// 判断⽬录是否存在
if (!htmlFile.exists()) {
// 如果⽬录不存在,则新建⽬录
htmlFile.mkdir();
}
// 获取⽂件名(随机⽣成不重复的⽂件名)
String fileName = System.currentTimeMillis() + ".html";
// 创建html⽂件
File file = new File(htmlFile, fileName);
// 获取⽂件输出流
FileWriter writer = new FileWriter(file);
try {
// 输出html 将模型数据填充到模板中
template.process(map, writer);
// 输出成功
System.out.println("新闻创建成功!");
} catch (TemplateException e){
e.printStackTrace();
} finally {
writer.flush();
writer.close();
}
```
页:
[1]