什么是模板引擎?常见的模板引擎有哪些?thymeleaf的常用指令介绍。

 为什么要用模板引擎:

        因为模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,这就大大提升了开发效率,良好的设计也使得代码重用变得更加容易。我们司空见惯的模板安装卸载等概念,基本上都和模板引擎有着千丝万缕的联系。模板引擎不只是可以让你实现代码分离(业务逻辑代码和用户界面代码),也可以实现数据分离(动态数据与静态数据),还可以实现代码单元共享(代码重用),甚至是多语言、动态页面与静态页面自动均衡(SDE)等等与用户界面可能没有关系的功能。

什么是模板引擎:

 模板引擎是为了解决用户界面(显示)与业务数据(内容)分离而产生的。 他可以生成特定格式的文档,常用的如格式如HTML、xml以及其他格式的文本格式。其工作模式如下:

 

 常见的的模板引擎:

 jsp、freemarker、velocity、themleaf

JSP :

优点:

1、功能强大,可以写java代码

2、支持jsp标签(jsp tag)

3、支持表达式语言(el表达式,jstl语法)

4、官方标准,用户群广,丰富的第三方jsp标签库

5、性能良好。jsp编译成class文件执行,有很好的性能表现

缺点:

jsp没有明显缺点,由于可以编写java代码,如使用不当容易破坏结构。

velocity:

较早出现的用于代替jsp的模板语言

优点:

1、不能编写java代码,可以实现严格的mvc分离

2、性能良好,据说比jsp性能还要好些

3、使用表达式语言,据说jsp的表达式语言就是学velocity的

缺点:

1、不是官方标准

2、用户群体和第三方标签库没有jsp多。

3、对jsp标签支持不够好

4、已经很久很久没有维护了。

freemarker

优点:

1、不能编写java代码,可以实现严格的mvc分离

2、性能非常不错

3、对jsp标签支持良好

4、内置大量常用功能,使用非常方便

5、宏定义(类似jsp标签)非常方便

6、使用表达式语言

缺点:

1、不是官方标准

2、用户群体和第三方标签库没有jsp多

Thymeleaf:

Thymeleaf是用来开发Web和独立环境项目的服务器端的Java模版引擎

• Spring官方支持的服务的渲染模板中,并不包含jsp。而是Thymeleaf和 Freemarker等,而Thymeleaf与SpringMVC的视图技术,及SpringBoot的 自动化配置集成非常完美,几乎没有任何成本,你只用关注Thymeleaf的语法 即可。

动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏 览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是 由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示 方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态 地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动 态显示。

开箱即用:它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展 和创建自定义的方言。

多方言支持:Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的 可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。

与SpringBoot完美整合:SpringBoot提供了Thymeleaf的默认配置,并且 为Thymeleaf设置了视图解析器,我们可以像以前操作jsp一样来操作Thymeleaf。代 码几乎没有任何区别,就是在模板语法上有区别。

Thymeleaf 在页面的使用 – 声明

<html xmlns:th="http://www.thymeleaf.org" >

创建HTML 需要在HTML中的标签中加入:

在页面的需要动态数据的标签上使用th:xx 指令来进行动态 数据的加载

Thymeleaf 在页面的使用 – 使用WebContext中的变量

Thymeleaf通过${...}来获取model中的变量,这是一种ognl表达式。

OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个开源项目。

在HTML中的标签上使用th:xx 指令来动态加载变量例如:

注意:如果不支持这种th:的命名空间写法,那么可以把th:text换成 data-th-text

 Thymeleaf 在页面的使用 — 自动变量语法糖

当Servlet传递的是一个对象时,Ognl 提供了类似js的语法:

<h1 th:text="${stu.sname}">学生名</h1>
<h1 th:text="${stu.birthday}">学生生日</h1>
<h1 th:text="${stu.score}">成绩</h1>
<h1 th:text=“${stu.bj.classname}”>班级名</h1>

Thymeleaf 在页面的使用 – 对象语法糖

当数据量比较多的时候,频繁的写user.就会非常麻烦。

• 首先,在 父标签上用 th:object="${user}"获取user的值,并且保存

• 然后,在子标签任意元素上,可以通过 *{属性名}的方式,来获取user中的属性,这样 就省去了大量的user.前缀了

<!-- 语法糖 获取对象数据 1.父标签 -->
	<div th:object="${stu1}">
		<span th:text="*{sid}"></span>
		<div th:text="*{sname}"></div>
		<input th:value="*{ssex}">
		<p th:text="*{birthday}"></p>
		<span th:text="*{classid}"></span>
	</div>

Thymeleaf 在页面的使用 -- 对象中方法的调用

Thymeleaf 在页面的使用 – 一些java中常用的方法也可以使用

学生的姓名中间有个空格: 可以使用java中的字符串的方法split来进行分割

 

Thymeleaf 在页面的使用 – 内置对象

 Thymeleaf中提供了一些内置对象,并且在这些对象中提供了一些方法。 获取这些对象,需要使用#对象名来引用 或者 使用语法糖。

使用#对象名:
<h1 th:text="${#session.getAttribute('stu')['sname']}"></h1>
语法糖:
<h1 th:text="${session.stu.sname}"></h1>

Thymeleaf 在页面的使用 – 全局对象

Thymeleaf中提供一些便捷的对象来处理页面上的数据

一个日期,我们从数据库中拿出来的格式并不是我们想要的,此时就可以使用全局 对象进行处理。

今天是:<span th:text=“${#dates.format(数据,'yyyy-MM-dd')}">日期</span>

Thymeleaf 在页面的使用 – 算术运算符

支持的算术运算符:+ - * / %

<span th:text="${session.stu.score} + 10"> 分数加10 </span>
<span th:text="${session.stu.score} - 10"> 分数减10 </span>
<span th:text="${session.stu.score} * 10"> 分数乘10 </span>
<span th:text="${session.stu.score} / 10"> 分数除10 </span>
<span th:text="${session.stu.score} % 10"> 分数取余10 </span>

Thymeleaf 在页面的使用 – 比较运算符和逻辑运算符

支持的比较运算:>, = , <= ,==, !=

(但是>, <不建议直接使用,因为xml会解析为标签,要使用别名。)

注意: == 和 != 不仅可以比较数值,类似于equals的功能。

可以使用的别名:

        比较:> , < , >= , <= ( gt , lt , ge , le )

        等于:== , != ( eq , ne )

支持的逻辑运算 :and , or, not(!)

Thymeleaf 在页面的使用 – 三元运算符

 Thymeleaf中的三元运算符跟java中的三元运算符是一样的:

<span th:text="${session.stu.ssex} == 1?'男':'女'"></span>

特殊的三元运算符 — 默认值: 值 ?: 默认值

有的时候,取一个值可能为空,这个时候需要做有一个默认值,可以使用 表达式 ?: 默认值简写  

<span th:text="${session.stu.sname} ?: '没名字真可怜'"></span>

当前面的表达式值为null时,就会使用后面的默认值。 注意:?:之间没有空格。

Thymeleaf 在页面的使用 – 逻辑判断

Thymeleaf中使用th:if 或者 th:unless 进行逻辑判断

<!-- 
		th:if="条件为真" 页面元素就渲染到网页上
		th:if="条件为假" 页面元素就不会渲染到网页上
		th:unless="条件为真" 页面元素就不会渲染到网页上
		th:unless="条件为假" 页面元素就渲染到网页上
	 -->
	<div th:if="${sex} == 1">
		<input type="radio" name="sex" value="男" checked > 男
		<input type="radio" name="sex" value="女" >女
	</div>
	
	<div th:if="${sex} == 0">
		<input type="radio" name="sex" value="男"  > 男
		<input type="radio" name="sex" value="女"  checked >女
	</div>
	<hr>
	<div th:unless="${sex} == 1">
		<input type="radio" name="sex" value="男" checked > 男
		<input type="radio" name="sex" value="女" >女
	</div>
	
	<div th:unless="${sex} == 0">
		<input type="radio" name="sex" value="男"  > 男
		<input type="radio" name="sex" value="女" checked >女
	</div>

以下情况被认定为false:

• 表达式值为false

• 表达式值为0数值

• 表达式值为0字符

• 表达式值为字符串是"false","no","off"

• 其它情况包括null都被认定为false

th:if 和 th:unless 表达式相反的效果

Thymeleaf 在页面的使用 – 分支控制

Thymeleaf中使用两个指令:th:switch 和 th:case 与java中的switch是一样的

 需要注意的是,一旦有一个th:case成立,其它的则不再判断。 另外th:case="*"表示默认,放最后。

Thymeleaf 在页面的使用 – 循环控制

 Thymeleaf 在页面的使用 – 循环控制

th:each=“变量,状态 : 集合”

状态对象包含以下属性:

• index,从0开始的角标

• count,元素的个数,从1开始

• size,总元素个数

• current,当前遍历到的元素

• even/odd,返回是否为奇偶,boolean值 even偶数,odd奇数

• first/last,返回是否为第一或最后,boolean值

Thymeleaf 在页面的使用 – 字符串拼接

我们经常会用到普通字符串与表达式拼接的情况:

<span th:text=
"'欢迎您:' + ${session.stu.sname} + '!'"></span>

字符串字面值需要用'',拼接起来非常麻烦, Thymeleaf对此进行了简化,使用一对 | 即可:

<div th:text="|欢迎${username}|"></div>

Thymeleaf 在页面的使用 – 在超链接中使用动态数据

在之前做的数据表格中有对数据的删除或修改,需要用到超链接, 每个超链接中携带的参数的值是不同的。

语法:th:href=“@{xxxx(key=value,key2=value2,…)}”

Thymeleaf 在页面的使用 -- 在html内容中使用动态数据

<!-- 两队嵌套的中括号的方式进行页面的格式书写 -->
	<div><span style="color:red">欢迎</span>[[${username}]]</div>

同理可以在js中嵌入动态数据:

<script type="text/javascript">
		alert('[[${username}]]')
	</script>

 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值