`

Thymeleaf模板的使用及与Spring Boot的集成

阅读更多

新一代Java模板引擎Thymeleaf

参考: http://www.tianmaying.com/tutorial/using-thymeleaf

http://blog.csdn.net/u012706811/article/details/52185345

 

Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎。类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。

 

1.引入依赖

maven中直接引入

 

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
 

可以查看依赖关系,发现spring-boot-starter-thymeleaf下面已经包括了spring-boot-starter-web,所以可以把spring-boot-starter-web的依赖去掉.

2.配置视图解析器

spring-boot很多配置都有默认配置,比如默认页面映射路径为 
classpath:/templates/*.html 
同样静态文件路径为 
classpath:/static/

在application.properties中可以配置thymeleaf模板解析器属性.就像使用springMVC的JSP解析器配置一样

#thymeleaf start
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
#开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
#thymeleaf end

 

具体可以配置的参数可以查看 
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties这个类,上面的配置实际上就是注入到该类中的属性值.

3.编写DEMO

1.控制器

    @Controller
    public class HelloController {

        private Logger logger = LoggerFactory.getLogger(HelloController.class);
        /**
         * 测试hello
         * @return
         */
        @RequestMapping(value = "/hello",method = RequestMethod.GET)
        public String hello(Model model) {
            model.addAttribute("name", "Dear");
            return "hello";
        }

    }

 

2.view(注释为IDEA生成的索引,便于IDEA补全)

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<!--/*@thymesVar id="name" type="java.lang.String"*/-->
<p th:text="'Hello!, ' + ${name} + '!'" >3333</p>
</body>
</html>

 

3.效果

这里写图片描述

4.基础语法

回味上面的DEMO,可以看出来首先要在改写html标签

<html xmlns:th="http://www.thymeleaf.org">

这样的话才可以在其他标签里面使用th:*这样的语法.这是下面语法的前提.

1.获取变量值

<p th:text="'Hello!, ' + ${name} + '!'" >3333</p>

可以看出获取变量值用&符号,对于javaBean的话使用变量名.属性名方式获取,这点和EL表达式一样.

另外$表达式只能写在th标签内部,不然不会生效,上面例子就是使用th:text标签的值替换p标签里面的值,至于p里面的原有的值只是为了给前端开发时做展示用的.这样的话很好的做到了前后端分离.

2.引入URL

Thymeleaf对于URL的处理是通过语法@{…}来处理的

<a th:href="@{http://blog.csdn.net/u012706811}">绝对路径</a>
<a th:href="@{/}">相对路径</a>
<a th:href="@{css/bootstrap.min.css}">Content路径,默认访问static下的css文件夹</a>

类似的标签有:th:hrefth:src

3.字符串替换

很多时候可能我们只需要对一大段文字中的某一处地方进行替换,可以通过字符串拼接操作完成:

<span th:text="'Welcome to our application, ' + ${user.name} + '!'">

一种更简洁的方式是:

<span th:text="|Welcome to our application, ${user.name}!|">

当然这种形式限制比较多,|…|中只能包含变量表达式${…},不能包含其他常量、条件表达式等。

4.运算符

在表达式中可以使用各类算术运算符,例如+, -, *, /, %

th:with="isEven=(${prodStat.count} % 2 == 0)"

逻辑运算符>, <, <=,>=,==,!=都可以使用,唯一需要注意的是使用<,>时需要用它的HTML转义符

    th:if="${prodStat.count} &gt; 1"
    th:text="'Execution mode is ' + ( (${execMode} == 'dev')? 'Development' : 'Production')"

5.条件

if/unless

Thymeleaf中使用th:if和th:unless属性进行条件判断,下面的例子中,标签只有在th:if中条件成立时才显示:

<a th:href="@{/login}" th:unless=${session.user != null}>Login</a>

th:unless于th:if恰好相反,只有表达式中的条件不成立,才会显示其内容。

Switch

Thymeleaf同样支持多路选择Switch结构:

<div th:switch="${user.role}">
  <p th:case="'admin'">User is an administrator</p>
  <p th:case="#{roles.manager}">User is a manager</p>
</div>

默认属性default可以用*表示:

<div th:switch="${user.role}">
  <p th:case="'admin'">User is an administrator</p>
  <p th:case="#{roles.manager}">User is a manager</p>
  <p th:case="*">User is some other thing</p>
</div>

6.循环

渲染列表数据是一种非常常见的场景,例如现在有n条记录需要渲染成一个表格

,该数据集合必须是可以遍历的,使用th:each标签:

 

<body>
  <h1>Product list</h1>

  <table>
    <tr>
      <th>NAME</th>
      <th>PRICE</th>
      <th>IN STOCK</th>
    </tr>
    <tr th:each="prod : ${prods}">
      <td th:text="${prod.name}">Onions</td>
      <td th:text="${prod.price}">2.41</td>
      <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
    </tr>
  </table>

  <p>
    <a href="../home.html" th:href="@{/}">Return to home</a>
  </p>
</body>

可以看到,需要在被循环渲染的元素(这里是)中加入th:each标签,其中th:each=”prod : ${prods}”意味着对集合变量prods进行遍历,循环变量是prod在循环体中可以通过表达式访问。

7.Utilities

为了模板更加易用,Thymeleaf还提供了一系列Utility对象(内置于Context中),可以通过#直接访问:

  • #dates
  • #calendars
  • #numbers
  • #strings
  • arrays
  • lists
  • sets
  • maps
  • … 
    下面用一段代码来举例一些常用的方法:

date

/*
 * Format date with the specified pattern
 * Also works with arrays, lists or sets
 */
${#dates.format(date, 'dd/MMM/yyyy HH:mm')}
${#dates.arrayFormat(datesArray, 'dd/MMM/yyyy HH:mm')}
${#dates.listFormat(datesList, 'dd/MMM/yyyy HH:mm')}
${#dates.setFormat(datesSet, 'dd/MMM/yyyy HH:mm')}

/*
 * Create a date (java.util.Date) object for the current date and time
 */
${#dates.createNow()}

/*
 * Create a date (java.util.Date) object for the current date (time set to 00:00)
 */
${#dates.createToday()}

string

/*
 * Check whether a String is empty (or null). Performs a trim() operation before check
 * Also works with arrays, lists or sets
 */
${#strings.isEmpty(name)}
${#strings.arrayIsEmpty(nameArr)}
${#strings.listIsEmpty(nameList)}
${#strings.setIsEmpty(nameSet)}

/*
 * Check whether a String starts or ends with a fragment
 * Also works with arrays, lists or sets
 */
${#strings.startsWith(name,'Don')}                  // also array*, list* and set*
${#strings.endsWith(name,endingFragment)}           // also array*, list* and set*

/*
 * Compute length
 * Also works with arrays, lists or sets
 */
${#strings.length(str)}

/*
 * Null-safe comparison and concatenation
 */
${#strings.equals(str)}
${#strings.equalsIgnoreCase(str)}
${#strings.concat(str)}
${#strings.concatReplaceNulls(str)}

/*
 * Random
 */
${#strings.randomAlphanumeric(count)}

 

 

补充

在spring-boot1.4之后,支持thymeleaf3,可以更改版本号来进行修改支持. 
3相比2极大的提高了效率,并且不需要标签闭合,类似的link,img等都有了很好的支持,按照如下配置即可

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- set thymeleaf version -->
    <thymeleaf.version>3.0.0.RELEASE</thymeleaf.version>
    <thymeleaf-layout-dialect.version>2.0.0</thymeleaf-layout-dialect.version>
    <!--set java version-->
    <java.version>1.8</java.version>
  </properties>
 
 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Spring Boot集成Thymeleaf模板引擎的完整步骤

    本文将为大家介绍Spring Boot集成Thymeleaf模板引擎的完整步骤,从基本概念到实际配置,详细地介绍了Thymeleaf模板引擎的使用方法。 一、Thymeleaf模板引擎概述 Thymeleaf是一种模板引擎框架,支持HTML5标准,可以...

    spring boot+bootstrap+thymeleaf

    Thymeleaf与Spring Boot结合使用时,可以无缝集成,提供强大的视图渲染能力。 **整合应用:Spring Boot + Bootstrap + Thymeleaf** 将这三者结合起来,可以构建出高效、美观且易于维护的企业级Web应用。Spring Boot...

    Spring MVC / Spring Boot中使用Thymeleaf模板引擎

    这篇博文将深入探讨如何在Spring MVC和Spring Boot中集成和使用Thymeleaf。 首先,Thymeleaf的主要特点在于其语法直观且易于理解,它允许在HTML模板中直接嵌入表达式,通过`th:`前缀来标记特定的属性。例如,`th:...

    springboot用thymeleaf模板引擎

    SpringBoot与Thymeleaf模板引擎的整合是现代Java Web开发中的常见实践,它为开发者提供了便捷的MVC(Model-View-Controller)框架支持,实现了动态HTML页面的渲染。Thymeleaf是一款强大的服务器端模板引擎,尤其适用...

    springboot-thymeleaf

    这个名为"springboot-thymeleaf"的项目就是一个实例,展示了如何在Spring Boot应用中集成并使用Thymeleaf。 Spring Boot简化了Spring应用的初始搭建以及开发过程,它集成了大量的常用库,如数据访问、安全、Web等,...

    基于spring boot 2集成hibernate及thymeleaf的简单实例

    在本文中,我们将深入探讨如何在Spring Boot 2框架中集成Hibernate ORM和Thymeleaf模板引擎,构建一个简单的Web应用程序。Spring Boot以其简洁的配置和开箱即用的特性,已经成为Java领域开发微服务和Web应用的首选。...

    spring boot+thymeleaf+bootstrap 简单实现后台管理系统界面

    首先,Spring Boot是基于Spring框架的快速开发工具,它集成了许多常用组件,如数据访问、安全、Web服务等,通过"约定优于配置"的原则,使得开发者可以更专注于业务逻辑而非基础设施的配置。在本项目中,Spring Boot...

    spring boot+thymeleaf项目实战

    在本项目实战中,我们将深入探讨Spring Boot与Thymeleaf的集成应用,这是一个流行的Java Web开发框架组合,用于快速构建高效、现代化的Web应用程序。Spring Boot简化了Spring的配置,而Thymeleaf则是一个功能强大的...

    spring boot thymeleaf 整合 百度Ueditor 集成demo

    可以使用Spring Boot提供的`MultipartFile`类来接收上传的文件。 ### 6. 安全考虑 在生产环境中,务必考虑安全问题,比如防止文件名注入、大小限制、文件类型检查等,以避免潜在的安全风险。 通过以上步骤,你就...

    全注解 spring boot +spring security + mybatis+druid+thymeleaf+mysql+bootstrap

    标题中的"全注解 spring boot +spring security + mybatis+druid+thymeleaf+mysql+bootstrap"是一个集成开发环境的配置,涉及到的主要技术有Spring Boot、Spring Security、MyBatis、Druid、Thymeleaf、MySQL以及...

    springboot整合thymeleaf+maven实现异常处理页面

    Thymeleaf 是一个现代服务器端 HTML 模板引擎,特别适合与 SpringMVC 结合使用,提供动态内容渲染。而 Maven 是一个项目管理工具,帮助开发者构建、管理和部署 Java 项目。 在这个“springboot整合thymeleaf+maven...

    Spring Boot:SpringBoot集成Thymeleaf模板引擎.docx

    Spring Boot:SpringBoot集成Thymeleaf模板引擎.docx

    spring boot+hibernate+thymeleaf 练习demo项目源码

    在本项目中,"spring boot+hibernate+thymeleaf 练习demo项目源码" 是一个基于Spring Boot框架、Hibernate ORM工具和Thymeleaf模板引擎的实践示例。这个小而精简的Demo旨在帮助学习者理解如何整合这三个核心技术来...

    springboot与thymeleaf

    Thymeleaf与Spring MVC结合,可以在控制器中设置模型数据,然后在视图层使用Thymeleaf模板展示。 6. **Thymeleaf的布局功能**:Thymeleaf提供了一种叫做"布局分发器"的机制,允许我们创建一个主布局,然后其他页面...

    spring_boot使用的 模版引擎 thymeleaf3.0

    在Spring Boot项目中使用Thymeleaf作为模板引擎是目前Web开发中常见的实践之一,而Thymeleaf 3.0作为最新版本,已经广泛地集成在Spring MVC应用中,其功能和使用方式都成为开发人员必须掌握的技术要点。Thymeleaf是...

    springboot整合thymeleaf模板

    SpringBoot已经集成了Thymeleaf,只需在父依赖`spring-boot-starter-web`的基础上添加`spring-boot-starter-thymeleaf`。 ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-thymeleaf...

    SpringBoot-thymeleaf模板集成

    SpringBoot-thymeleaf模板集成是现代Java Web开发中常用的一种技术组合,它结合了Spring Boot的便捷性和Thymeleaf模板引擎的强大功能。Spring Boot致力于简化Spring应用的初始搭建以及开发过程,而Thymeleaf则是一款...

    spring boot+thymeleaf+mybatis+mysql

    然后,创建一个`application.properties`或`application.yml`文件,配置Spring Boot的属性,包括服务器端口、Thymeleaf模板路径、MyBatis的配置文件路径、数据库连接信息等。 2. 配置Thymeleaf:Thymeleaf模板文件...

    Spring Boot 2.0 + Thymeleaf模板+简单增删改查分页

    在本项目中,我们主要探讨的是如何利用Spring Boot 2.0.4版本与Thymeleaf模板引擎来实现一个包含基本CRUD操作(创建、读取、更新、删除)和分页功能的Web应用程序。Spring Boot是Spring框架的一个简化版,它提供了...

    spring boot +spring security+thymeleaf实现权限

    在本文中,我们将深入探讨如何使用Spring Boot、Spring Security和Thymeleaf这三个强大的Java技术栈组件来实现一个全面的权限管理系统,同时涵盖Remember-Me功能。Spring Boot简化了Spring应用的开发,Spring ...

Global site tag (gtag.js) - Google Analytics