Spring - Spring Boot - Thymeleaf - textual 模式
概述
- thymeleaf 的 text 模式简单使用
- 过程会比较啰嗦, 需要结论的同学, 可以直接到底部去寻找
背景
想尝试做一个简单的 模板工具
目的
- 自动生成一些简单的 重复文本
思路
- 尽量简单
- 使用 json 装填数据
- 这个可能会调整
- 用 restful 方式, 提交给 server
- spring-boot 集成, 很方便
- json 解析
- jackson 看了看, 还行
- 使用 模板 生成内容
- thymeleaf 应该能满足要求
- spring-boot 集成很方便
- 返回 模板生成内容
- 这个 第4步 顺手就做了
- 使用 json 装填数据
- 尽量简单
不过我比较生疏
- jackson 基本没用过
- 不过还算顺利
- thymeleaf 之前也是基本没用过
- 只会传最简单的 静态参数
- 本人前端苦手, 看见 html, js, css 就头晕
- jackson 基本没用过
环境
os
- win10
ide
- idea 2018.1
依赖
- jdk
- 1.8
- spring-boot
- 2.2.2
- maven
- 3.6
- jdk
1. 准备
spring-boot 创建 maven 工程
- 略
spring-boot 创建 restful 服务
- 略
thymeleaf 模板与传参
- 知道传到 那个模板
- 知道参数写在哪, 怎么取
2. 尝试1: 使用 thymeleaf 的 text 模式尝试
controller
model
添加属性
model.addAttribute("var1", "value1");
view
视图
return "test";
test.html
[(${var1})]
结果
- 成功展示
3. 尝试2: 尝试循环
controller
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
model.addAttribute("list", list);
test.html
[# th:each="item : ${list}"]
- [(${item})]
[/]
结果
- 失败
- 直接原文显示
- 失败
疑问: 为啥会失败了呢?
- 问题
- 代码基本是 官网复制过来的
- 之前也没啥问题, 怎么会失败呢?
- 问题
4. 尝试3: 在 test.html 添加 尝试1 里的代码
结果
- var1 成功展示
- 后面的 循环, 还是没有成功
疑问: 为啥会是这种呢
- 感觉像是 循环的语法, 没有被 正确识别的样子
- 语法识别, 是跟 模式 相关吗?
5. 尝试4: 设置模式
发现
thymeleaf 可以定义 html5 严格模式
spring.thymeleaf.mode=LEGACYHTML5
其他的模式, 也是可以设置的
- ref2
配置文件 application.properties
添加内容
spring.thymeleaf.mode=TEXT
结果
- 还是不行
疑问
- 忽然发现, 官网的例子, 举的都是 邮件, js, css
- 我用的是 html, 会不会跟这个有关
- 忽然发现, 官网的例子, 举的都是 邮件, js, css
6. 尝试5; 换 模板文件
疑问
- thymeleaf 默认会给 模板名称结尾, 加上一个 .html
处理
去掉 .html 的默认后缀
application.properties
spring.thymeleaf.suffix=
重命名 模板
- 改名为 "test"
重启服务器
尝试
- ok
后续
尝试1: 去掉 模式定义 的语句
- 又不能解析了
尝试2: 将 模板名称, 改回 "test.html"
- 还是不行
7. 结论
想要使用 text 模式, 需要做以下操作
application.properties
spring.thymeleaf.mode=TEXT
spring.thymeleaf.suffix=
模板
- 使用 text 模式的专用语法
如果其他地方, 想用 html
- 在 controller 方法的 返回值里, 使用 x.html 类似的视图名称
过程, 感觉有点曲折
- 之前没怎么接触
- 真的想不到, 这个工作模式, 还会跟 模板的后缀名 做一个挂钩
- 而且还有一个开关
- 感觉这种盲猜真的很麻烦
- 照着官网抄都超不对, 体验真实差到了极点, 很容易收到打击...
- 不知道经验老到的同学, 在这块会不会遇到这种新手问题...前前后后, 花了个把小时, 感觉浪费很多时间的样子...
- 或者换个角度, thymeleaf 的开发者, 就不想在这种场景, 让用户使用 text 模式
- 这个角度也是收到了留言小伙伴的启发...
8. 猜测
text 模式语法
- 语法本身, 是 inline 模式
- html 支持部分 inline 模式的语法
- 支持变量提取
- 不支持 each
模板解析
- 根据 模板的后缀, 选择合适的 解析器
- 每种解析器, 只能解析 有限的语法
- 解析 html 的解析器, 无法解析 text 模式的 each
ps
ref
-
- 官网 文档
- 本身比较详细, 但是 textual 模式, 却说得比较略
- 官网 文档
Thymeleaf 3 ten-minute migration guide
- 官网 文档
- 讲了些 spring 的代码配置
- 可惜版本是 spring4 的
- 我用的是 spring5, 可能会有点出入
- 大体结构是这样
- viewResolver: 视图解析器
- templateEngine: 模板引擎
- templateResolver: 模板解析器
- templateEngine: 模板引擎
- viewResolver: 视图解析器
- 但是后面具体的调用机制, 我就不太熟悉了
- 讲了些 spring 的代码配置
- 官网 文档
thymeleaf3-template-modes-example
- 官网 例子
大概给了三套
- 视图解析器, 模板引擎, 模板解析器
具体什么机制, 也没说明白
- 或者说, 我没看明白
- 比如说
- 这些 解析器, 什么时候调用哪个?
- 盲猜
- 根据 controller 视图的后缀, 来确定使用哪个 模板解析器
- 具体机制, 还没深入了解
- 官网 例子
-
怎么说呢?
- 还是喜欢那种, 先学习, 后使用 的工作模式
- 这种 边用边查资料 的模式, 我不太喜欢
- 做东西太赶
- 做了前面, 容易给后面埋坑
- 学东西太着急
- 容易造成理解问题
- 做东西太赶
- 不过这种方式, 应该是大多数公司的日常工作模式吧
- 反正我接触的, 基本是这样...
- 想想还有点难受
- 这种 边用边查资料 的模式, 我不太喜欢
- 还是喜欢那种, 先学习, 后使用 的工作模式
如果用 其他模板引擎 做同样的事, 会有这么麻烦吗?
- jsp
- Velocity
- freemarker
Spring - Spring Boot - Thymeleaf - textual 模式的更多相关文章
- spring boot + thymeleaf 3 国际化
在给spring boot 1.5.6 + thymeleaf 3进行国际化时,踩了一个坑(其实不止一个). 现象: 看到了吧, 就是取值的key, 后面被加了_en_US 或 _zh_CN, 以及前 ...
- spring boot + Thymeleaf开发web项目
"Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等.大多数情况下Web应用程序将使用 spring- ...
- Spring boot+Thymeleaf+easyui集成:js创建组件页面报错
开发工具:Ideal 使用场景:Demo 前提: 环境:Spring boot +Thymeleaf+easyui 引入thymeleaf模板引擎 <html lang=" ...
- Intellij IDEA Spring Boot 项目Debug模式启动缓慢问题
问题 Intellij IDEA Spring Boot 项目Debug模式启动缓慢 环境 os: windows10 idea :2018.1 解决方法 去除所有断点就正常了,很诡异,原因未知.
- spring boot: thymeleaf模板引擎使用
spring boot: thymeleaf模板引擎使用 在pom.xml加入thymeleaf模板依赖 <!-- 添加thymeleaf的依赖 --> <dependency> ...
- Spring Boot Thymeleaf 实现国际化
开发传统Java WEB工程时,我们可以使用JSP页面模板语言,但是在SpringBoot中已经不推荐使用了.SpringBoot支持如下页面模板语言 Thymeleaf FreeMarker Vel ...
- Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用
前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...
- spring boot + thymeleaf 乱码问题
spring boot + thymeleaf 乱码问题 hellotrms 发布于 2017/01/17 15:27 阅读 1K+ 收藏 0 答案 1 开发四年只会写业务代码,分布式高并发都不会还做 ...
- Spring boot +Thymeleaf 搭建springweb
对接天猫精灵的时候需要有网关服务器方提供几个页面,服务器已经有了,spring boot的 纯后台的,就加了Thymeleaf jar包添加几个页面跳转 maven配置 <!-- 引入thy ...
随机推荐
- python进阶----深拷贝&浅拷贝
复制需要区分,,复制的是源文件的数据,还是指向源文件数据的地址 1.引用 b=a时,理解为b指向了a指向的数据,相当于引用复制 a=[1,2] b=a #验证复制的是数据还是地址 #1.查看ab的 ...
- Electron – 基础学习(2): 项目打包成exe桌面应用 之electron-packager
项目创建完成,启动正常,接下来就是项目打包了.将测试Demo打包成exe桌面应用,点击exe文件,运行项目. 书接上文,创建项目有三种方式 Git拷贝.直接创建:通过electron社群提供的命令行工 ...
- centos7 升级sqlite3
升级sqlite3 官网 点击 1.下载源码 wget https://www.sqlite.org/2019/sqlite-autoconf-3300100.tar.gz 2.解压,编译 .tar. ...
- 深度优先搜索DFS---01背包问题(1)
题目: 有n件物品,每件物品的重量为w[i],价值为c[i].现在需要选出若干件物品放入一个容量为 V 的背包中,使得在选入背包的物品重量之和,不超过容量V的前提下,让北欧保重物品的价值之和最大,求最 ...
- SecureCRT 按退格键出现 ^H 的解决办法
问题如图 打开SecureCRT 界面,最上方工具栏 1.选项→会话选项 2.终端→仿真→映射键 3.其他选项→勾选 Backspace 发送 delete(B) 4.点击确定即可 另外在不可编辑状态 ...
- 方法(定义、调用、重载)—Java
一. 什么是方法 不可能所有的功能都放到main中,需要定义其他方法完成指定功能,需要时调用方法即可 封装在一起来执行操作语句的集合,用来完成某个功能操作 封装在一起来执行操作语句的集合,用来完成某个 ...
- html+layui
添加html+layui项目 先引用一个js文件 <form class="layui-form" action=""> <link href ...
- elasticsearch学习(1)
安装 elasticsearch ,操作elasticsearch的工具kibana, (1)在kibana中输入GET _cluster/health查看es的健康状况(2)在kibana中输入 G ...
- vue 学习2
模板指令.属性总结 html 中的标签属性 1. :class 值是对象,key为class 的值,值为boolean类型 html标签任意属性都可以:属性,表示动态值(值是变化的,不是固定不变的) ...
- 在iOS下-input[disabled] 颜色变浅兼容&& input[readonly]仍可获取焦点解决方法
目标:在写input输入框时,想让其只读不写. 环境:在iPhone上 本来用的时readonly,可是readonly,居然可以获取焦点,不能弹出键盘:安卓手机完全木有问题,所以去用了disable ...