SpringBoot——Thymeleaf的表达式

Posted 张起灵-小哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot——Thymeleaf的表达式相关的知识,希望对你有一定的参考价值。

1.Thymeleaf中的标准变量表达式(掌握)

标准变量表达式用于访问容器(tomcat)上下文环境中的变量,功能和 EL 中的 ${} 相同。Thymeleaf 中的变量表达式使用 ${变量名} 的方式获取 Controller 中 model 其中的数据。

语法:${...}

2.Thymeleaf中的选择变量表达式(了解,不推荐使用)

选择变量表达式,也叫星号变量表达式,使用 th:object 属性来绑定对象。

选择表达式首先使用 th:object 来绑定后台传来的 User 对象,然后使用 * 来代表这个对象,后面 {} 中的值是此对象中的属性。

选择变量表达式 *{...} 是另一种类似于标准变量表达式 ${...} 表示变量的方法。

选择变量表达式在执行时是在选择的对象上求解,而${...}是在上下文的变量 Model 上求解,这种写法比标准变量表达式繁琐,只需要大家了解即可。

语法:*{...}

3.案例演示

首先写一个model。

package com.songzihao.springboot.model;

/**
 *
 */
public class User {
    private Integer id;
    private String name;
    private Integer age;

    //getter and setter
}

然后是我们的控制层,UserController。

package com.songzihao.springboot.controller;

import com.songzihao.springboot.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 */
@Controller
public class UserController {

    @RequestMapping(value = "/user/detail")
    public ModelAndView userDetail() {
        ModelAndView mv=new ModelAndView();

        User user=new User();
        user.setId(1001);
        user.setName("张起灵");
        user.setAge(21);

        mv.addObject("user",user);
        mv.setViewName("userDetail");
        return mv;
    }

}

下来写这个 /user/detail 请求对应的html页面。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h2>使用标准变量表达式 ${} 展示User用户信息:</h2>
    用户编号:<span th:text="${user.id}"></span><br />
    用户姓名:<span th:text="${user.name}"></span><br />
    用户年龄:<span th:text="${user.age}"></span><br />
    <hr />
    <h2>使用选择变量表达式 *{} 展示User用户信息(星号表达式,仅在 div 范围内有效)</h2>
    <div th:object="${user}">
        用户编号:<span th:text="*{id}"></span><br />
        用户姓名:<span th:text="*{name}"></span><br />
        用户年龄:<span th:text="*{age}"></span><br />
    </div>
</body>
</html>

最后在核心配置文件中,添加以下内容。

#关闭Thymeleaf缓存
spring.thymeleaf.cache=false

#thymeleaf 模版前缀,默认值,可选项
spring.thymeleaf.prefix=classpath:/templates/
#thymeleaf 模版后缀,默认值,可选项
spring.thymeleaf.suffix=.html

最后启动项目入口类进行测试。

package com.songzihao.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

可以看到我们在这里成功的通过Thymeleaf模板引擎中的变量表达式获取到了后台的数据。


4.Thymeleaf中的URL表达式

主要用于链接、地址的展示,可用于<script src="...">、<link href="...">、<a href="...">、<form action="...">、<img src="">等,可以
在 URL 路径中动态获取数据。

语法:@{...}

4.1 案例演示

首先写一个Controller控制层,里面定义几个请求方法。

package com.songzihao.springboot.controller;

import com.songzihao.springboot.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 */
@Controller
public class UserController {

    @RequestMapping(value = "/url")
    public String urlExpression(Model model) {
        model.addAttribute("name","张起灵");
        model.addAttribute("id",1001);
        model.addAttribute("age",21);
        return "url";
    }

    @RequestMapping(value = "/test")
    public @ResponseBody String test(Integer id,String name,Integer age) {
        return "请求路径/test,获取到的数据中 id = " + id + ", name = " + name + ", age = " + age;
    }

}

然后对应的是我们的html页面。

注意URL表达式中,分别用到了绝对路径和相对路径。(这里推荐使用相对路径)

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>URL路径表达式</title>
</head>
<body>
    <h2>URL路径表达式:@{......}</h2>
    <h4>a标签中的绝对路径(没有参数)</h4><br/>
    <a th:href="@{http://www.tencent.com}">跳转到腾讯</a><br/><br/>
    <a th:href="@{http://localhost:8080/user/detail}">跳转到/user/detail</a><br/><br/>
    <hr/>
    <h4>a标签中的相对路径(没有参数)</h4><br/>
    <a th:href="@{/user/detail}">跳转到/user/detail</a><br/><br/>
    <hr/>
    <h4>a标签中的绝对路径(带参数)</h4><br/>
    <a th:href="@{'http://localhost:8080/test?name=' + ${name}}">查看用户姓名</a><br/><br/>
    <hr/>
    <h4>a标签中的相对路径(带参数)</h4><br/>
    <a th:href="@{'/test?id=' + ${id} + '&name=' + ${name} + '&age=' + ${age}}">复杂写法:查看用户姓名</a><br/><br/>
    <a th:href="@{/test(id=${id},name=${name},age=${age})}">简练写法:查看用户姓名</a>
</body>
</html>

下面是核心配置文件中的内容、以及启动入口类测试。

#关闭Thymeleaf缓存
spring.thymeleaf.cache=false

#thymeleaf 模版前缀,默认值,可选项
spring.thymeleaf.prefix=classpath:/templates/
#thymeleaf 模版后缀,默认值,可选项
spring.thymeleaf.suffix=.html
package com.songzihao.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

点击第一个链接,会跳转至腾讯官网首页。

点击第二、三个链接,会跳转至 userDetail.html 这个页面展示从后台获取到的数据。

点击最后三个链接,会将获取到的用户信息内容进行展示。(这里展示结果我就不再给出截图了)

以上是关于SpringBoot——Thymeleaf的表达式的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot——Thymeleaf中的表达式基本对象表达式功能对象

SpringBoot——Thymeleaf中的表达式基本对象表达式功能对象

SpringBoot系列之集成Thymeleaf用法手册

Thymeleaf入门(基于SpringBoot)

Java之SpringBoot-Thymeleaf详情

Thymeleaf模板引擎