Thymeleaf

概述

Thymeleaf是一个服务器端的JAVA模板引擎,通过java获取数据,html构造视图,组装成html模板(由于jsp视图化的页面每次刷新都会重新调用数据,对服务器端造成压力,使用模板引擎就可以每隔一段时间刷新一次模板,减少了服务器的压力)
流行的Java引擎:Velocity,Freemarker,Thymeleaf(Spring官方推荐)

模板引擎的构建(Web应用)

  1. 定义引擎对象
  2. 创建解析器
  3. 封装数据
  4. 将模板解析发送到客户端,或目标文件

代码演示

//1.声明引擎对象
TemplateEngine engine = new TemplateEngine();
//2.创建servlet模板解析器(web应用)
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(req.getServletContext());
resolver.setPrefix("templates/");
resolver.setSuffix(".html");
resolver.setCharacterEncoding("UTF-8");
engine.setTemplateResolver(resolver);
//3.封装数据
WebContext context = new WebContext(req, resp, req.getServletContext());
//4.根据模板生成文件发送到客户端
engine.process(tplName, context, resp.getWriter());

标准表达式

简单表达式

  1. ${…}:变量表达式

${x}:来自Context或request当中的值
${session.x}:来自session中的值
${application.x}:来自application中的值

  1. *{…}:选择变量表达式(可以选定某一个元素)
  2. #{…}:消息表达式,从外部资源文件获取值(消息表达式用于从消息源中提取消息内容实现国际化)
  3. @{…}:url连接表达式,在th:href中使用,可以在连接中添加变量
  4. ~{…}:片段表达式,在th:fragment中可以将其他文件中的代码片段加入

文字

文本文字:‘text’

文本操作

|The name is ${name}|:文本替换,将文本和变量连接

指令

处理文本—th:text/th:utext

<p th:text="'hi'">hello</p>

th:text指令可以替换标签中间的内容,如上,生成到浏览器端的html代码为<p>hi</p>

<p th:utext="'<p></p>'"></p>

th:utext可以识别html标签,如上,如果用th:text则会在页面显示p标签的代码文本,而用th:utext会在标签中间嵌套一个p标签

循环迭代—th:each

<ol th:each="prod:${prods}">
	<li th:text="${prod.name}"></li>
	<li th:text="${prod.isStock}?${true}:${false}">yes</li>
</ol>

如上,th:each="prod:$ {prods}"表示遍历$ {prods},prod(迭代变量)相当于${prods}(迭代表达式)中的每一个元素

url连接—th:href

<a th:href="@{servlet/name={name}(${user.getName()})}"></a>
<a th:href="@{|servlet/name=${user.getName()}|}"></a>
<a th:href="@{servlet/name=+${user.getName()}}"></a>

与href属性的区别在于,th:href中可以依照上方语法在url中加上变量值,在传参时起作用,th:href会替换掉原有的href中的值,需要使用链接表达式

片段共用—th:fragment+th:replace/th:insert

<div th:fragment="片段名"></div>
<div th:replace="~{模板名::片段名}"></div>
<div th:insert="~{模板名::片段名}"></div>
  1. 页面的头部和尾部可能重复,可以使用th:fragment、th:replace、th:insert来进行片段共用,作用和html中的iframe类似
  2. th:fragment定义需要共用的片段
  3. th:replace为片段替换,在th:replace中使用片段表达式,大括号中使用模板名::片段名的形式来替换
  4. th:insert作用是插入片段,即将片段加在原片段内,结果<div><div></div></div>

条件—th:if/th:unless/th:switch+th:case

th:if

<div th:if="条件"></div>

当条件满足时,标签生效,当条件不满足时,标签无效

th:unless

<div th:unless="条件"></div>

当条件满足时,标签无效;当条件不满足时,标签生效;th:unless与th:if相反

注意

th:if属性不仅只以布尔值作为判断条件。 它的功能有点超出这⼀点,它将按照这些规则判定指定的表达式值为true:、

  1. 表达式的值不为null
  2. 表达式的值为布尔值时,且为true
  3. 表达式的值为数字时,并且不为0
  4. 表达式的值为字符时,并且不为0
  5. 表达式的值式字符串时,并且不为"false"、“no”、“off”
  6. 如果值不是布尔值,数字,字符或字符串且不为空

th:switch

<div th:switch="判断标准">
<p th:case="待判断变量"></p>
</div>

与java中的switch相同,当待判断变量满足判断标准时,标签生效,否则标签无效,带有th:switch的标签是否生效与条件无关

代码块—th:block

<th:block></th:block>

th:block是当标签用的指令,它不会被转化为html标签,而是直接将文本代码加入

设置属性值—th:attr

<img th:src=""></img>
<a th:href=""></a>

可以通过th:attr的方式用thymeleaf来写入属性,属性中就可以用到变量表达式,对于链接需要用到链接表达式才能解析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值