thymeleaf 学习笔记
什么是 thymeleaf?
在后端渲染html页面方面,有多种模板引擎(JSP的替代物)可以使用(关于后端渲染/页面直出的好处,可以参考一下:Web性能优化之“直出”理论与实践总结。
实际开发或学习中,有多种模板引擎可供选择:
- Thymeleaf
- FreeMarker
- Velocity
- Groovy
- Mustache
总体上,thymeleaf 相较与其他的模板引擎,它有如下三个特点(该总结来源于网上!):
1. Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。(当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。)
2. Thymeleaf 开箱即用的特性。(它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果。)
3. Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
另外,Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,该作者还是Java加密库Jasypt的作者。
thymeleaf 基础知识
- maven 导包
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.2.RELEASE</version>
</dependency>
- 增加头文件属性
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
- 用th标签动态替换掉静态数据
- 后台传出的message会将静态数据“Old Message”替换掉
- 访问静态页面,则显示数据“Old Message”
<td th:text="${message}">Old Message</td>
springMVC 框架整合 thymeleaf
- maven 导包
- spring-web.xml 配置文件(即spring配置servlet的servlet.xml中)
<!--springMVC+thymeleaf的跳转页面配置-->
<bean id="templateResolver"
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<property name="prefix" value="/WEB-INF/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="Html5" />
<property name="characterEncoding" value="UTF-8"/>
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
</bean>
<bean id="thymeleafResolver" class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
<property name="characterEncoding" value="UTF-8"/>
</bean>
spring boot 框架整合 thymeleaf
将总结于 spring boot 学习之中。
thymeleaf 的 th 标签
一、th 标签的分类
1. 变量表达式 ${……}
如th:value= "${user.name}"
:将引用user对象的name值。
2. 文字国际化表达式 #{……}
3. 选择/星号表达式 *{……}
4. URL表达式 @{……}
注意: @{……}支持决定路径和相对路径。其中相对路径又支持跨上下文调用url和协议的引用
二、 常用的th标签
简单数据转换(数字,日期)
<dt>价格</dt>
<dd th:text="${#numbers.formatDecimal(product.price, 1, 2)}">180</dd>
<dt>日期</dt>
<dd th:text="${#dates.format(product.availableFrom, 'yyyy-MM-dd')}">2017-01-01</dd>
字符串拼接
<dd th:text="${'$'+product.price}">235</dd>
条件判断:不能用”<”,”>”等符号,要用”lt”等替代
<span th:if="${product.price lt 100}" class="offer">Special offer!</span>