SpringBoot学习之 Thymeleaf
在学习SpringBoot Web应用开发之前,我们都是通过@RestController 来处理请求,所返回的内容为json对象。如果返回html页面,则用@Controller直接请求,匹配请求为 @RequestMapping("/")
@Controller public class HelloController { @ResponseBody @RequestMapping("/hello") public String hello() { return "Hello World"; } @RequestMapping("/") public String index(ModelMap map) { map.addAttribute("host", "我是yaohuiqin"); return "index"; } }
模板引擎:
在动态HTML实现上Spring Boot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,完美可以很快的上手开发动态网站。
SpringBoot建议使用模板引擎,避免使用JSP,若一定使用JSP将无法实现SpringBoot的多种性能。
常见的模板引擎:
- Thymeleaf
- FreeMarker
- Velocity
- Groovy
- Mustache
默认的模板配置路径为:src/main/resource/templates.
Thymeleaf:
Thymeleaf 是一个XML/XHTML/HTML5模板引擎,可以用于Web与非Web环境中的应用开发。它提供了一个用于整合Spring Mvc 的可选模块,在应用开发中,你可以使用Theamleaf来完全代替JSP或其他模板引擎。如Velocity。 Thymeleaf的目标是提供一种可被浏览器正确显示的,格式良好的模板创建方式,因为也可以称作静态建模。
例如:
<table> <thead> <tr> <th th:text="#{msgs.headers.name}">Name</td> <th th:text="#{msgs.headers.price}">Price</td> </tr> </thead> <tbody> <tr th:each="prod : ${allProducts}"> <td th:text="${prod.name}">Oranges</td> <td th:text="${#numbers.formatDecimal(prod.price,1,2)}">0.99</td> </tr> </tbody> </table>
在Spring Boot中使用Thymeleaf,只需要引入下面依赖,并在默认的模板路径src/main/resources/templates
下编写模板文件即可完成。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
相关的属性配置:
# Enable template caching. spring.thymeleaf.cache=true # Check that the templates location exists. spring.thymeleaf.check-template-location=true # Content-Type value. spring.thymeleaf.content-type=text/html # Enable MVC Thymeleaf view resolution. spring.thymeleaf.enabled=true # Template encoding. spring.thymeleaf.encoding=UTF-8 # Comma-separated list of view names that should be excluded from resolution. spring.thymeleaf.excluded-view-names= # Template mode to be applied to templates. See also StandardTemplateModeHandlers. spring.thymeleaf.mode=HTML5 # Prefix that gets prepended to view names when building a URL. spring.thymeleaf.prefix=classpath:/templates/ # Suffix that gets appended to view names when building a URL. spring.thymeleaf.suffix=.html spring.thymeleaf.template-resolver-order= # Order of the template resolver in the chain. spring.thymeleaf.view-names= # Comma-separated list of view names that can be resolved.
常用th标签都有那些?
关键字 功能介绍 案例 th:id 替换id <input th:id="'xxx' + ${collect.id}"/> th:text 文本替换 <p th:text="${collect.description}">description</p> th:utext 支持html的文本替换 <p th:utext="${htmlcontent}">conten</p> th:object 替换对象 <div th:object="${session.user}"> th:value 属性赋值 <input th:value="${user.name}" /> th:with 变量赋值运算 <div th:with="isEven=${prodStat.count}%2==0"></div> th:style 设置样式 th:style="'display:' + @{(${sitrue} ? 'none' : 'inline-block')} + ''" th:onclick 点击事件 th:onclick="'getCollect()'" th:each 属性赋值 tr th:each="user,userStat:${users}"> th:if 判断条件 <a th:if="${userId == collect.userId}" > th:unless 和th:if判断相反 <a th:href="@{/login}" th:unless=${session.user != null}>Login</a> th:href 链接地址 <a th:href="@{/login}" th:unless=${session.user != null}>Login</a> /> th:switch 多路选择 配合th:case 使用 <div th:switch="${user.role}"> th:case th:switch的一个分支 <p th:case="'admin'">User is an administrator</p> th:fragment 布局标签,定义一个代码片段,方便其它地方引用 <div th:fragment="alert"> th:include 布局标签,替换内容到引入的文件 <head th:include="layout :: htmlhead" th:with="title='xx'"></head> /> th:replace 布局标签,替换整个标签到引入的文件 <div th:replace="fragments/header :: title"></div> th:selected selected选择框 选中 th:selected="(${xxx.id} == ${configObj.dd})" th:src 图片类地址引入 <img class="img-responsive" alt="App Logo" th:src="@{/img/logo.png}" /> th:inline 定义js脚本可以使用变量 <script type="text/javascript" th:inline="javascript"> th:action 表单提交的地址 <form action="subscribe.html" th:action="@{/subscribe}"> th:remove 删除某个属性 <tr th:remove="all"> 1.all:删除包含标签和所有的孩子。 2.body:不包含标记删除,但删除其所有的孩子。 3.tag:包含标记的删除,但不删除它的孩子。 4.all-but-first:删除所有包含标签的孩子,除了第一个。 5.none:什么也不做。这个值是有用的动态评估。 th:attr 设置标签属性,多个属性可以用逗号分隔 比如 th:attr="src=@{/image/aa.jpg},title=#{logo}",此标签不太优雅,一般用的比较少。