SpringBoot Freemarker基础配置与使用方式
1.基础配置
1.1引入依赖
<!-- 引入freemarker模板引擎的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>1.2在application.properties配置文件中添加如下配置:
# 是否开启thymeleaf缓存,本地为false,生产建议为true spring.freemarker.cache=false spring.freemarker.charset=UTF-8 spring.freemarker.allow-request-override=false spring.freemarker.check-template-location=true #类型 spring.freemarker.content-type=text/html spring.freemarker.expose-request-attributes=true spring.freemarker.expose-session-attributes=true # #文件后缀 spring.freemarker.suffix=.ftl #路径 .ftl文件就创建在templates下面或者子目录 spring.freemarker.template-loader-path=classpath:/templates/
2.基础使用
首先我在controller类中编写一个测试接口用来测试使用,编写内容如下
@Controller
public class FreeMarkerController {
Map<String ,Object> map = new HashMap<>();
List<Object> list = new ArrayList();
@GetMapping("/freemaker/{id}/{name}")
public String demo(@PathVariable("id")String id ,@PathVariable("name") String name,Model model){
map.clear();
map.put("id",id);
map.put("name",name);
list.add(2);
list.add(4);
map.put("aa",null);
model.addAttribute("map",map);
model.addAttribute("list",list);
model.addAttribute("date",new Date());
return "index";
}
}
以下所有变量都是有上面接口提供
2.1调用map类型数据,实体类也可使用此格式调用属性
/*可直接获取id对应的v值*/
id:${map.id}
name:${map.name}
2.2集合调用,set集合也可用此格式调用相应的元素
list01:${list[0]}
list02:${list[1]}
2.3,字符串拼接的两种方法
${"你好啊${map.name}"}
${"你好啊"+map.name}
2.4FreeMarker表达式中支持“+”、“-”、“*”、“/”、“%”运算符
${list[1]+list[0]}
${list[1]-list[0]}
${list[1]*list[0]}
${list[1]/list[0]}
${list[1]%list[0]}
2.5表达式中支持的比较运算符有如下几种:
1. =(或者==):判断两个值是否相等; 2. !=:判断两个值是否不相等; 注: =和!=可以用作字符串、数值和日期的比较,但两边的数据类型必须相同。而且FreeMarker的比较是精确比较,不会忽略大小写及空格。 3. >(或者gt):大于 4. >=(或者gte):大于等于 5. <(或者lt):小于 6. <=(或者lte):小于等于 注: 上面这些比较运算符可以用于数字和日期,但不能用于字符串。大部分时候,使用gt比>有更好的效果,因为FreeMarker会把>解释成标签的结束字符。可以使用括号来避免这种
2.6时间格式转换
${date?string("yyyy-MM-dd")}
2.7支持逻辑表达式
FreeMarker支持逻辑运算但是只支持布尔型逻辑运算两个值进行比较运算的的时候需要添加括号才能进行逻辑运算,一般用于指令中 1. &&: 逻辑与; 2. ||:逻辑或; 3. !:逻辑非 逻辑运算符只能用于布尔值。
2.8FreeMarker无法理解null值
FreeMarker的变量必须赋值,否则就会抛出异常。而对于FreeMarker来说,null值和不存在的变量是完全一样的,因为FreeMarker无法理解null值。
FreeMarker提供两个运算符来避免空值:
1.!运算
1.1若是msg不存在不报异常默认空值,若是不使用!会报异常<br>
${msg!}
1.2若是存在则输出,若是不存在则默认为abc<br>
${map.a!"abc"}<br>
2.??返回布尔值一般用在指令中下面会有引用此处不解释<br>
2.9 if指令
<#if map.aa?? >
存在
<#else >
不存在
</#if>
<br>
<#if (list[0]>=3) >
优秀
<#elseif (list[0]>=2)>
良好
<#else >
差劲
</#if>
2.10 list指令 遍历
<#list list as li>
${li}<br>
</#list>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
ArrayList和LinkedList区别及使用场景代码解析
这篇文章主要介绍了ArrayList和LinkedList区别及使用场景代码解析,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下2018-01-01
Java中的CompletionService批量异步执行详解
这篇文章主要介绍了Java中的CompletionService批量异步执行详解,我们知道线程池可以执行异步任务,同时可以通过返回值Future获取返回值,所以异步任务大多数采用ThreadPoolExecutor+Future,需要的朋友可以参考下2023-12-12
IDEA报错“Command line is too long”的解决步骤
这篇文章解释了在使用SpringBoot项目时,因启动命令行过长导致启动失败的问题,并提供了两种解决方案:JARmanifest和classpathfile,推荐使用JARmanifest,如果遇到类加载问题可;同时提供了修改默认模板的方法,以避免以后的新项目再次遇到此问题,需要的朋友可以参考下2026-05-05


最新评论