how2j.cn

下载区
文件名 文件大小
thymeleaf.rar 5k

解压rar如果失败,请用5.21版本或者更高版本的winrar

点击下载 winrar5.21
步骤 1 : 基于上一个知识点改进   
步骤 2 : 先运行,看到效果,再学习   
步骤 3 : 模仿和排错   
步骤 4 : TestController   
步骤 5 : test.html   
步骤 6 : 关于真假判断   
步骤 7 : 重启测试   

步骤 1 :

基于上一个知识点改进

edit
本知识点是建立在上一个知识点可运行项目的基础上进行的改进,所以最好把上个知识点理解和消化了.
步骤 2 :

先运行,看到效果,再学习

edit
老规矩,先下载右上角的可运行项目,配置运行起来,确认可用之后,再学习做了哪些步骤以达到这样的效果。
运行 Application.java, 然后访问地址:
http://127.0.0.1:8080/thymeleaf/test

即可看到如图所示的效果。
先运行,看到效果,再学习
在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍。
模仿过程难免代码有出入,导致无法得到期望的运行结果,此时此刻通过比较正确答案 ( 可运行项目 ) 和自己的代码,来定位问题所在。
采用这种方式,学习有效果,排错有效率,可以较为明显地提升学习速度,跨过学习路上的各个槛。

推荐使用diffmerge软件,进行文件夹比较。把你自己做的项目文件夹,和我的可运行项目文件夹进行比较。
这个软件很牛逼的,可以知道文件夹里哪两个文件不对,并且很明显地标记出来
这里提供了绿色安装和使用教程:diffmerge 下载和使用教程
增加一个布尔值数据,并且放在model中便于视图上获取
package com.how2java.springboot.web; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.how2java.springboot.pojo.Product; @Controller public class TestController { @RequestMapping("/test") public String test(Model m) { String htmlContent = "<p style='color:red'> 红色文字</p>"; Product currentProduct =new Product(5,"product e", 200); boolean testBoolean = true; m.addAttribute("htmlContent", htmlContent); m.addAttribute("currentProduct", currentProduct); m.addAttribute("testBoolean", testBoolean); return "test"; } }
Thymeleaf 的条件判断是 通过 th:if 来做的,只有为真的时候,才会显示当前元素
<p th:if="${testBoolean}" >如果testBoolean 是 true ,本句话就会显示</p>


取反可以用not, 或者用th:unless.
<p th:if="${not testBoolean}" >取反 ,所以如果testBoolean 是 true ,本句话就不会显示</p>
<p th:unless="${testBoolean}" >unless 等同于上一句,所以如果testBoolean 是 true ,本句话就不会显示</p>


除此之外,三元表达式也比较常见
<p th:text="${testBoolean}?'当testBoolean为真的时候,显示本句话,这是用三相表达式做的':''" ></p>
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>hello</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" media="all" href="../../webapp/static/css/style.css" th:href="@{/static/css/style.css}"/> <script type="text/javascript" src="../../webapp/static/js/thymeleaf.js" th:src="@{/static/js/thymeleaf.js}"></script> <style> h2{ text-decoration: underline; font-size:0.9em; color:gray; } </style> </head> <body> <div class="showing"> <h2>条件判断</h2> <p th:if="${testBoolean}" >如果testBoolean 是 true ,本句话就会显示</p> <p th:if="${not testBoolean}" >取反 ,所以如果testBoolean 是 true ,本句话就不会显示</p> <p th:unless="${testBoolean}" >unless 等同于上一句,所以如果testBoolean 是 true ,本句话就不会显示</p> <p th:text="${testBoolean}?'当testBoolean为真的时候,显示本句话,这是用三相表达式做的':''" ></p> </div> <div class="showing"> <h2>显示 转义和非转义的 html 文本</h2> <p th:text="${htmlContent}" ></p> <p th:utext="${htmlContent}" ></p> </div> <div class="showing"> <h2>显示对象以及对象属性</h2> <p th:text="${currentProduct}" ></p> <p th:text="${currentProduct.name}" ></p> <p th:text="${currentProduct.getName()}" ></p> </div> <div class="showing" th:object="${currentProduct}"> <h2>*{}方式显示属性</h2> <p th:text="*{name}" ></p> </div> <div class="showing"> <h2>算数运算</h2> <p th:text="${currentProduct.price+999}" ></p> </div> <div class="showing"> <div th:replace="include::footer1" ></div> <div th:replace="include::footer2(2015,2018)" ></div> </div> </body> </html>
步骤 6 :

关于真假判断

edit
不只是布尔值的 true 和 false, th:if 表达式返回其他值时也会被认为是 true 或 false,规则如下:

boolean 类型并且值是 true, 返回 true
数值类型并且值不是 0, 返回 true
字符类型(Char)并且值不是 0, 返回 true
String 类型并且值不是 "false", "off", "no", 返回 true
不是 boolean, 数值, 字符, String 的其他类型, 返回 true

值是 null, 返回 false
重新启动Application.java, 然后访问如下地址测试:
http://127.0.0.1:8080/thymeleaf/test


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2020-01-15 这里提醒一下,各位
NoColor

当th:if内容为false/0/null时,表示本标签及标签内的内容都不显示,包括子标签。 与上面站长例举的三元运算符不是一回事,当三元运算符不满足条件时只是不显示标签里面的内容,标签体还是存在的







回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢

2019-11-08 <p th:if="${not testBoolean}" >不对吧
孑孓酱

<p th:if="${not testBoolean}" > 应该是 <p th:if="not${testBoolean}" >吧




3 个答案

起个名
答案时间:2024-08-24
111
1
***

jh_315322
答案时间:2022-06-18
不一样啊,如果把not放在${}内部会报错啊

joffe
答案时间:2019-11-25
都一样,你把not改成 !也行



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢

2019-02-05 th:if标签只能通过true或false来判断是否显示当前元素么




提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢