本帖最后由 z1109079622 于 2021-2-15 18:29 编辑
freemarker 网页显示有点问题,我把源文件放到附件里了
一、数据类型
1.布尔型
布尔类型不能直接输出,要先转化为字符串
${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
:百分比型字符串
保留浮点型数值指定小数位
${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进行输出
${元素名}
api
${序列名?size}
:获取序列的长度
${序列名?index}
:获取序列元素的下标
${序列名?first}
:获取第一个元素
${序列名?last}
:获取最后一个元素
${序列名?join(",")}
:以","分隔 把数组拼成一个字符串
:倒序输出
:升序输出
:降序输出
如果list集合元素是JavaBean
JavaBean对象的属性一定要有对应的get方法才能获取对应的值
${user.id}
按照指定字段排序
${user.id}
6.hash类型
Map集合
也是用list标签输出
-
获取key并通过key获取value
${key}
${hash[key]}
-
直接获取map的value
${value}
二、常用指令
assign
使⽤assign指令你可以创建⼀个新的变量, 或者替换⼀个已经存在的变量。
(可以定义多个变量)
逻辑判断指令
注:小于是lt、 大于是gt、 大于等于是gte、 小于等于是lte
...
...
...
...
list
macro 自定义指令
-
不带参数的
格式:
指令内容
使⽤:
-
带参参数的
格式:
指令内容
使⽤:
nested占位符
可以将⾃定义指令中的内容通过nested指令占位,当使⽤⾃定义指令时,会将占位内容显示。
这是⼀段⽂本!
这是⽂本后⾯的内容!
import
导入其他flt的命名空间,就可以使用命名空间中定义的宏和方法了
include
在freemarker中插入整个页面。html文件或者freemarker文件都可以
三、FreeMarker页面静态化
用于输出html
可以把数据库中的数据写入到html中,用于内容不经常改变的页面
-
服务器
// 实例化模板配置对象
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();
}