1. 概述

    1. thymeleaf 的 text 模式简单使用
    2. 过程会比较啰嗦, 需要结论的同学, 可以直接到底部去寻找
  2. 背景

    1. 想尝试做一个简单的 模板工具

      1. 目的

        1. 自动生成一些简单的 重复文本
      2. 思路

        1. 尽量简单

          1. 使用 json 装填数据

            1. 这个可能会调整
          2. 用 restful 方式, 提交给 server
            1. spring-boot 集成, 很方便
          3. json 解析
            1. jackson 看了看, 还行
          4. 使用 模板 生成内容
            1. thymeleaf 应该能满足要求
            2. spring-boot 集成很方便
          5. 返回 模板生成内容
            1. 这个 第4步 顺手就做了
    2. 不过我比较生疏

      1. jackson 基本没用过

        1. 不过还算顺利
      2. thymeleaf 之前也是基本没用过
        1. 只会传最简单的 静态参数
        2. 本人前端苦手, 看见 html, js, css 就头晕
  3. 环境

    1. os

      1. win10
    2. ide

      1. idea 2018.1
    3. 依赖

      1. jdk

        1. 1.8
      2. spring-boot
        1. 2.2.2
      3. maven
        1. 3.6

1. 准备

  1. spring-boot 创建 maven 工程

  2. spring-boot 创建 restful 服务

  3. thymeleaf 模板与传参

    1. 知道传到 那个模板
    2. 知道参数写在哪, 怎么取

2. 尝试1: 使用 thymeleaf 的 text 模式尝试

  1. controller

    1. model

      1. 添加属性

        model.addAttribute("var1", "value1");
    2. view

      1. 视图

        return "test";
  2. test.html

    [(${var1})]
  3. 结果

    1. 成功展示

3. 尝试2: 尝试循环

  1. controller

    List<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    model.addAttribute("list", list);
  2. test.html

    [# th:each="item : ${list}"]
    - [(${item})]
    [/]
  3. 结果

    1. 失败

      1. 直接原文显示
  4. 疑问: 为啥会失败了呢?

    1. 问题

      1. 代码基本是 官网复制过来的
      2. 之前也没啥问题, 怎么会失败呢?

4. 尝试3: 在 test.html 添加 尝试1 里的代码

  1. 结果

    1. var1 成功展示
    2. 后面的 循环, 还是没有成功
  2. 疑问: 为啥会是这种呢

    1. 感觉像是 循环的语法, 没有被 正确识别的样子
    2. 语法识别, 是跟 模式 相关吗?

5. 尝试4: 设置模式

  1. 发现

    1. thymeleaf 可以定义 html5 严格模式

      spring.thymeleaf.mode=LEGACYHTML5
    2. 其他的模式, 也是可以设置的

      1. ref2
  2. 配置文件 application.properties

    1. 添加内容

      spring.thymeleaf.mode=TEXT
  3. 结果

    1. 还是不行
  4. 疑问

    1. 忽然发现, 官网的例子, 举的都是 邮件, js, css

      1. 我用的是 html, 会不会跟这个有关

6. 尝试5; 换 模板文件

  1. 疑问

    1. thymeleaf 默认会给 模板名称结尾, 加上一个 .html
  2. 处理

    1. 去掉 .html 的默认后缀

      1. application.properties

        spring.thymeleaf.suffix=
    2. 重命名 模板

      1. 改名为 "test"
    3. 重启服务器

  3. 尝试

    1. ok
  4. 后续

    1. 尝试1: 去掉 模式定义 的语句

      1. 又不能解析了
    2. 尝试2: 将 模板名称, 改回 "test.html"

      1. 还是不行

7. 结论

  1. 想要使用 text 模式, 需要做以下操作

    1. application.properties

      spring.thymeleaf.mode=TEXT
      spring.thymeleaf.suffix=
    2. 模板

      1. 使用 text 模式的专用语法
    3. 如果其他地方, 想用 html

      1. 在 controller 方法的 返回值里, 使用 x.html 类似的视图名称
  2. 过程, 感觉有点曲折

    1. 之前没怎么接触
    2. 真的想不到, 这个工作模式, 还会跟 模板的后缀名 做一个挂钩
    3. 而且还有一个开关
    4. 感觉这种盲猜真的很麻烦
      1. 照着官网抄都超不对, 体验真实差到了极点, 很容易收到打击...
      2. 不知道经验老到的同学, 在这块会不会遇到这种新手问题...前前后后, 花了个把小时, 感觉浪费很多时间的样子...
      3. 或者换个角度, thymeleaf 的开发者, 就不想在这种场景, 让用户使用 text 模式
        1. 这个角度也是收到了留言小伙伴的启发...

8. 猜测

  1. text 模式语法

    1. 语法本身, 是 inline 模式
    2. html 支持部分 inline 模式的语法
      1. 支持变量提取
      2. 不支持 each
  2. 模板解析

    1. 根据 模板的后缀, 选择合适的 解析器
    2. 每种解析器, 只能解析 有限的语法
      1. 解析 html 的解析器, 无法解析 text 模式的 each

ps

  1. ref

    1. 13 Textual template modes

      1. 官网 文档

        1. 本身比较详细, 但是 textual 模式, 却说得比较略
    2. Thymeleaf 3 ten-minute migration guide

      1. 官网 文档

        1. 讲了些 spring 的代码配置

          1. 可惜版本是 spring4 的
          2. 我用的是 spring5, 可能会有点出入
        2. 大体结构是这样
          1. viewResolver: 视图解析器

            1. templateEngine: 模板引擎

              1. templateResolver: 模板解析器
        3. 但是后面具体的调用机制, 我就不太熟悉了
    3. thymeleaf3-template-modes-example

      1. 官网 例子

        1. 大概给了三套

          1. 视图解析器, 模板引擎, 模板解析器
        2. 具体什么机制, 也没说明白

          1. 或者说, 我没看明白
          2. 比如说
            1. 这些 解析器, 什么时候调用哪个?
            2. 盲猜
              1. 根据 controller 视图的后缀, 来确定使用哪个 模板解析器
              2. 具体机制, 还没深入了解
  2. 怎么说呢?

    1. 还是喜欢那种, 先学习, 后使用 的工作模式

      1. 这种 边用边查资料 的模式, 我不太喜欢

        1. 做东西太赶

          1. 做了前面, 容易给后面埋坑
        2. 学东西太着急
          1. 容易造成理解问题
      2. 不过这种方式, 应该是大多数公司的日常工作模式吧
        1. 反正我接触的, 基本是这样...
        2. 想想还有点难受
  3. 如果用 其他模板引擎 做同样的事, 会有这么麻烦吗?

    1. jsp
    2. Velocity
    3. freemarker

Spring - Spring Boot - Thymeleaf - textual 模式的更多相关文章

  1. spring boot + thymeleaf 3 国际化

    在给spring boot 1.5.6 + thymeleaf 3进行国际化时,踩了一个坑(其实不止一个). 现象: 看到了吧, 就是取值的key, 后面被加了_en_US 或 _zh_CN, 以及前 ...

  2. spring boot + Thymeleaf开发web项目

    "Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等.大多数情况下Web应用程序将使用 spring- ...

  3. Spring boot+Thymeleaf+easyui集成:js创建组件页面报错

    开发工具:Ideal 使用场景:Demo 前提:       环境:Spring boot +Thymeleaf+easyui 引入thymeleaf模板引擎 <html lang=" ...

  4. Intellij IDEA Spring Boot 项目Debug模式启动缓慢问题

    问题 Intellij IDEA Spring Boot 项目Debug模式启动缓慢 环境 os: windows10 idea :2018.1 解决方法 去除所有断点就正常了,很诡异,原因未知.

  5. spring boot: thymeleaf模板引擎使用

    spring boot: thymeleaf模板引擎使用 在pom.xml加入thymeleaf模板依赖 <!-- 添加thymeleaf的依赖 --> <dependency> ...

  6. Spring Boot Thymeleaf 实现国际化

    开发传统Java WEB工程时,我们可以使用JSP页面模板语言,但是在SpringBoot中已经不推荐使用了.SpringBoot支持如下页面模板语言 Thymeleaf FreeMarker Vel ...

  7. Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用

    前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...

  8. spring boot + thymeleaf 乱码问题

    spring boot + thymeleaf 乱码问题 hellotrms 发布于 2017/01/17 15:27 阅读 1K+ 收藏 0 答案 1 开发四年只会写业务代码,分布式高并发都不会还做 ...

  9. Spring boot +Thymeleaf 搭建springweb

    对接天猫精灵的时候需要有网关服务器方提供几个页面,服务器已经有了,spring boot的 纯后台的,就加了Thymeleaf   jar包添加几个页面跳转 maven配置 <!-- 引入thy ...

随机推荐

  1. Linux DMA访问的一致性

    DMA访问的一致性 DMA对内存是直接访问的,而CPU对内存的访问有时会通过cache.不管是CPU还是DMA访问内存,都需要确保cache的一致性.本文只分析从DMA的角度,对内存的访问如何确保ca ...

  2. 如何使用vscode-代码编辑器工具

    vscode-代码编辑器的全称是“visual studio code”,主要是一个运行于 Mac OS X.Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器 ...

  3. select下拉框相关操作(更新中。。。)

    背景 记录一些关于html标签的操作,基本上都是jquery操作 select下拉框 根据value查找对应option,然后执行选中操作 $("#selectId").find( ...

  4. typescript-环境搭建

    这个环境比较简单 搭建 TypeScript 开发环境 什么是 compiler? less 编译器:less EcmaScript 6 编译器:babel TypeScript 编译器:typesc ...

  5. 单向链表的简单Java实现-sunziren

    写在前面,csdn的那篇同名博客就是我写的,我把它现在在这边重新发布,因为我实在不想用csdn了,那边的广告太多了,还有就是那个恶心人的“阅读更多”按钮,惹不起我躲得起. 最近面试的过程中,发现有的公 ...

  6. 嵊州D5T3 指令 program 神奇的位运算

    指令 program [问题描述] krydom 有一个神奇的机器. 一开始,可以往机器里输入若干条指令: opt x 其中,opt 是 & | ^ 中的一种,0 ≤ x ≤ 1023 . 对 ...

  7. 剑指offer-面试题20-表示数值的字符串-字符串

    /* 题目: 判断字符串是否表示数值. */ /* 思路: 字符串遵循模式A[.[B]][e|EC] ,[+|-].B[e|EC] A.C为可能带正负号的数字串 B为数字串 */ #include&l ...

  8. beego——view 模板语法

    一.基本语法 go统一使用{{和}}作为左右标签,没有其它的标签符号. 使用"."来访问当前位置的上下文,使用"$"来引用当前模板根级的上下文,使用$var来访 ...

  9. laravel框架api路由

    Route::group(['namespace' => 'Api'], function (){ Route::any('send','SmsController@send'); }); gr ...

  10. c++ STL queue:deque+优先队列

    /* queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque队列   类型.一:定义queue(要有头文件#include <qu ...