导入pom依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <!--可以不加,但是做项目的时候可能会用--> <resources> <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题--> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <!--freemarker模板也读取需要注释标红地方--> <resource> <directory>src/main/resources</directory> <includes> <!--<include>*.properties</include>--> <!--<include>*.xml</include>--> <!--<include>*.yml</include>--> </includes> </resource> </resources>
application.yml文件的默认配置
spring: thymeleaf: cache: false freemarker: # 设置模板后缀名 suffix: .ftl # 设置文档类型 content-type: text/html # 设置页面编码格式 charset: UTF-8 # 设置页面缓存 cache: false # 设置ftl文件路径,默认是/templates,为演示效果添加role template-loader-path: classpath:/templates/role mvc: static-path-pattern: /static/**
list.ftl
<h2>取值</h2> <h3>提供默认值</h3> welcome 【${name!'未知'}】 to freemarker! <h3>exists用在逻辑判断</h3> <#if name?exists> ${name} </#if> <h2>条件</h2> <#if sex=='girl'> 女 <#elseif sex=='boy'> 男 <#else> 保密 </#if> <h2>循环</h2> <table border="1px" width="600px"> <thead> <tr> <td>ID</td> <td>角色名</td> <td>描述</td> </tr> </thead> <tbody> <#list roles as role> <tr> <td>${role.rid}</td> <td>${role.roleName}</td> <td>${role.desc}</td> </tr> </#list> </tbody> </table> <h2>include</h2> <#include 'foot.ftl'> <h2>局部变量(assign)/全局变量(global)</h2> <#assign ctx1> ${springMacroRequestContext.contextPath} </#assign> <#global ctx2> ${springMacroRequestContext.contextPath} </#global> ${ctx1}和${ctx2}
foot.ftl
底部页面 <a href="login.ftl">返回登录1</a> <a href="${ctx}/toLogin">返回登录2</a>
common.ftl
<#assign ctx> ${springMacroRequestContext.contextPath} </#assign> <base href="${ctx}/">
login.ftl
欢迎来到登录界面
相关controler层的Java代码
@RequestMapping("/role/list") public ModelAndView roleList(){ ModelAndView mav = new ModelAndView(); mav.setViewName("/list"); mav.addObject("name",null); mav.addObject("sex","gay"); List list = new ArrayList(); list.add(new Role(1,"老师","教书育人")); list.add(new Role(2,"学生","知识改变命运")); mav.addObject("roles",list); return mav; } @RequestMapping("toLogin") public String toLogin(){ return "login"; }
浏览器显示结果
注意点:
1、application.yml中可以配置模板存放位置的根路径、以及静态资源文件存放位置的根路径
2、${springMacroRequestContext.contextPath}:SpringBoot中获取项目名
3、不推荐使用全局变量。即便它们属于不同的命名空间, 全局变量也被所有模板共享,因为它们是被 import进来的。
4、freemarker模板也可以像jsp那样设置根路径
<#include 'common.ftl'> <script src="js/xxx.js" type="text/javascript"></script>
thymeleaf中替代jsp:include的写法
两种情况
一种是应用一段html代码
在需要应用的地方添加
<div th:replace="foreground/common/head :: navbar" ></div>
一种是包含整个html页面
<div th:replace="navbar :: html"></div>
注意:
1、这里的th:replace里的路径是相对于templetes文件夹的。
2、冒号冒号前后都有空格,我没注意这一点踩了大坑
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有