1.基本语法
1、注释,即<#–和-->,介于其之间的内容会被freemarker忽略
2、FTL指令:和HTML标记类似,名字前加#予以区分,Freemarker会解析标签中的表达式或逻辑。
3、文本,仅文本信息,这些不是freemarker的注释、插值、FTL指令的内容会被freemarker忽略解析,直接输出内容。
<#-- 注释 -->
${user.age}
<#if 条件>
</#if>
2.数据模型
- 方式1:使用ModelAndView
- 修改 FreemarkerController,添加 model_a() 方法
@GetMapping("/model_a")
public ModelAndView model_a(){
ModelAndView modelAndView = new ModelAndView();
//设置模型(数据)
Map<String,String> map = new HashMap<>();
map.put("name","jack");
map.put("age","18");
modelAndView.addObject("user" , map);
//设置视图(页面)
modelAndView.setViewName("model_a");
return modelAndView;
}
- 创建 model_a.ftl 文件
用户名:${user.name} <br/>
密码:${user.age}
- 方式2:使用Model
@GetMapping("/model_b")
public String model_b(Model model){
//设置模型(数据)
Map<String,String> map = new HashMap<>();
map.put("name","jack");
map.put("age","19");
model.addAttribute("user",map);
//设置视图(页面)
return "model_b";
}
- 方式3:使用自定义数据
@GetMapping("/model_c")
public String model_c(Map map){
//设置模型(数据)
Map<String,String> userMap = new HashMap<>();
userMap.put("name","jack");
userMap.put("age","20");
map.put("user",userMap);
//设置视图(页面)
return "model_c";
}
3.List指令:遍历List
- 语法
<#list 集合 as 变量>
循环体
</#list>
_index:得到循环的下标,值是从0开始。使用方法"变量_index"
- 步骤一:模型数据
@GetMapping("/list")
public String list(Model model){
//设置模型(数据)
List<User> list = new ArrayList();
list.add(new User("jack","1234",18));
list.add(new User("rose","5678",21));
model.addAttribute("allUser", list);
//设置视图(页面)
return "list";
}
- 步骤二:编写ftl
<#list allUser as user>
${user_index + 1} -- ${user.username} -- ${user.password} -- ${user.age} <br/>
</#list>
- 步骤三:访问
4.List指令:遍历Map
- 步骤一:模型数据
@GetMapping("/map")
public String map(Model model){
//设置模型(数据)
Map<String,User> map = new HashMap<>();
map.put("user1", new User("jack","1234",18));
map.put("user2", new User("rose","5678",21));
model.addAttribute("allUser", map);
//设置视图(页面)
return "map";
}
- 步骤二:编码ftl
<#-- 一个数据 -->
${allUser.user1.username} <br/>
${allUser['user1'].username} <br/>
<#-- 遍历一组 -->
<#list allUser?keys as k>
${k} -- ${allUser[k].username} -- ${allUser[k].password} -- ${allUser[k].age} <br/>
</#list>
- 步骤三:访问
5.if指令
- 语法
<#if 条件 >
</#if>
- 步骤一:数据模型
@GetMapping("/if")
public String _if(Model model){
//设置模型(数据)
model.addAttribute("token", 1234);
model.addAttribute("token2", "1234");
//设置视图(页面)
return "if";
}
- 步骤二:编写ftl文件
<#if token==1234>
token 是 1234 <br/>
</#if>
<#if token2 != "5678">
token2 不是 5678 <br/>
</#if>
- 步骤三:测试
6.兼容
- 情况1:使用${}显示不存在的数据,将抛异常
- 情况2:使用if比较值相同,但类型不相同的数据时,将抛异常
- 解决方案:在yml文件中开启兼容
spring:
freemarker:
settings:
classic_compatible: true