注意:

三.*{...}选择表达式

注意th:object应该包含th:text,不能平行。

<div th:object="${last}"><!--选择表达式就像变量表达式一样,它们不是整个上下文变量映射上执行,而是在先前选择的对象(html元素包含关系)-->
    <span th:text="*{name}"></span><!--name是last变量的一个属性-->
</div>

四.消息(i18n)表达式

实现国际化的方式:

1.在resources下面增加:messages.properties,messages_en.properties,messages_zh_CN.properties

2.页面使用:

<span th:text="#{home.welcome}"></span><br/>
<span th:text="#{home.age(6,1)}"></span><br/><!--多语言有参数的情况-->

3.messages_zh_CN.properties中要用native2ascii编码

如果原来是:

home.welcome=我是中国人
home.loveme=我爱我的祖国
home.age=我今年{0}岁了,我上小学{1}年级了。

编码后会变成:

home.welcome=\u6211\u662f\u4e2d\u56fd\u4eba
home.loveme=\u6211\u7231\u6211\u7684\u7956\u56fd
home.age=\u6211\u4eca\u5e74{0}\u5c81\u4e86\uff0c\u6211\u4e0a\u5c0f\u5b66{1}\u5e74\u7ea7\u4e86\u3002

方法1:是使用开发工具的插件

方法2:使用jdk里面的命令

springboot Thymeleaf 模板生成全路径url_html

 执行过程是

springboot Thymeleaf 模板生成全路径url_java_02

命令的第一个参数是,编码前的文件,第二个参数是编码后输出内容到这个新的文件。

五.链接(URL)表达式

这里因为application.yml的context-path有值,所以在页面中很多地方跳转时需要到这个

server:
  servlet:
    context-path: /th-demo
  port: 8081

<a th:href="@{/admin}" th:text="@{/admin}"/>

输出的字符串是/th-demo/admin,还可以带着参数,如下所示:
<a th:href="@{/admin(id=3,name=xiaoming)}" th:text="@{/admin(id=3,name=xiaoming)}"/>

输出的字符串是/th-demo/admin?id=3&name=xiaoming

六.~{...} : 片段表达式。

th:fragment:自定义片段名
th:replace:不要自己的主标签,保留th:fragment的主标签
th:insert:保留自己的主标签,保留th:fragment的主标签
th:include:保留自己的主标签,不要th:fragment的主标签。(官方3.0后不推荐)

七.Thymeleaf简单格式化输出

格式化时间:
<dd th:text="${#dates.format(last.createTime, 'yyyy-MM-dd')}"></dd>
第一参数5是整数部分,如果整数部分不满五位,会用0补齐;第二个参数3是小数部分位数,小数点后面保留两位。:
<dd th:text="${#numbers.formatDecimal(last.id, 5, 3)}">350</dd>

显示情况:

springboot Thymeleaf 模板生成全路径url_java_03

附录:

项目文件目录如下:

springboot Thymeleaf 模板生成全路径url_spring_04

pom.xml

<!--spring mvc必须的-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!--thymeleaf 必须的-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

Controller

package com.example.thymeleafdemo.controller;

import com.example.thymeleafdemo.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Controller
@RequestMapping("/th")
public class ThDemo1Controller {

    @RequestMapping("/mv")
    public ModelAndView mv(){
        ModelAndView mv = new ModelAndView();

        //单个词
        mv.addObject("username","zhangsan");

        List<User> list = new ArrayList<User>();
        User user = new User();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-mm");
        for(int i = 0;i<100;i++){
            user.setId(i);
            user.setName("user," + i);
            try {
                Date d = df.parse("2" + i +"-11-11");
                user.setCreateTime(d);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        list.add(user);
        mv.addObject("list",list);

        mv.addObject("last",user);

        mv.setViewName("a");
        return mv;
    }
}

实体类

package com.example.thymeleafdemo.entity;


import java.util.Date;

public class User {
    private Integer id;
    private String name;
    private Date createTime;

    //...getter,setter方法
}

最主要的是a.html

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
</head>

<body>

<h1>一.原始值</h1>
<input type="text" th:value="文字输入值"/>


<h1>二.${...}变量表达式</h1>
<span th:text="${username}"/>


<h1>三.*{...}选择表达式</h1>
<div th:object="${last}"><!--选择表达式就像变量表达式一样,它们不是整个上下文变量映射上执行,而是在先前选择的对象(html元素包含关系)-->
    <span th:text="*{name}"></span><!--name是last变量的一个属性-->
</div>


<h1>四.消息(i18n)表达式</h1>
<span th:text="#{home.welcome}"></span><br/>
<span th:text="#{home.age}"></span><br/>
<span th:text="#{home.age(5)}"></span><br/>
<span th:text="#{home.age(6,1)}"></span><br/><!--多语言有参数的情况-->


<h1>五.链接(URL)表达式</h1><!--因此,对于部署在Web服务器的/myapp上下文中的Web应用程序,可以使用以下表达式:-->
<a th:href="@{/admin}" th:text="@{/admin}"/>
<br/>带参数的链接@{/admin(id=3,name=xiaoming)}:<br/>
<a th:href="@{/admin(id=3,name=xiaoming)}" th:text="@{/admin(id=3,name=xiaoming)}"/>


<h1>六.~{...} : 片段表达式。</h1>
<li>th:replace :不要自己的主标签,保留th:fragment的主标签:</li>
<div th:replace="~{b :: copy}" style="border: 5px solid blue;float:left;width:100%" />
<li>th:insert   :保留自己的主标签,保留th:fragment的主标签。:</li>
<div th:insert="~{b :: copy}" style="border: 5px solid green;float:left;width:100%" />
<li>th:include :保留自己的主标签,不要th:fragment的主标签。(官方3.0后不推荐)</li>
<div th:include="~{b :: copy}" style="border: 5px solid chartreuse;float:left;width:100%" />


</body>

</html>

b.html

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.w3.org/1999/xhtml">

<div th:fragment="copy" style="border: 1px solid red;float:left;width:100%">
    <br/>
    <table align="left"  border="1">
        <tr>
            <td>姓名:</td>
            <td>th:fragment自定义片段名</td>
        </tr>
        <tr>
            <td>性别:</td>
            <td>男</td>
        </tr>
    </table>
</div>

页面展示效果:

springboot Thymeleaf 模板生成全路径url_spring_05