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

一、模板引擎

模板引擎:为了解决用户界面(显示)与业务数据(内容)分离而产生的。

可以生成特定格式的文档,常用的格式例如:HTML、xml以及其他格式的文本格式。

具体的工作模式如下:

二、常见模板引擎

                        jsp、freemarker、velocity、themleaf

jsp

优点:

        1.功能强大,可以写Java代码

        2.支持jsp标签(jsp tag)

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

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

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

缺点:

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

freemarker(目前主流的模板引擎之一)

优点:

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

        2.性能非常不错

        3.对jsp标签支持良好

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

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

        6.使用表达式语言

缺点:

        1.不是官方的标准

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

velocity(较早代替jsp的模板语言)

        一个基于Java的模板引擎。它允许任何人使用简单但功能强大的模板语言来引用Java代码中定义的对象。

优点:

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

        2.性能良好,执行速度明显优于jsp

        3.使用表达式语言

缺点:

        1.不是官方标准

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

        3.对jsp标签支持不够好

        4.很久已经没有进行维护

themleaf

       Themleaf是用来开发Web和独立环境项目的服务器的Java模板引擎。

·       Spring官方支持的服务的渲染模板中,并不包含jsp。而是Themleaf和Freemarker等,而Themleaf与SpringMVC的视图技术,及SpringBoot的自动化配置集成非常完美,成本较低,只需要关注Themleaf的语法就行了。

特点一:

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

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

特点二:

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

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

三、thymeleaf的常用指令

        下面我们主要说一下Themleaf的常用指令:

1. th:xx 指令(Themleaf在页面的使用)

<html xmlns:th="http"//www.baidu.com">

2. ${}(使用WebContext中的变量,Themleaf通过${..}来获取model中的变量,这是一种ognl表达式)

<h1 th:text="${username}">静态内容</h1>

3. 自动变量语法糖

Student s = new Student();
s.setBirthday(new Date());
s.setScore(90.0);
s.setSname("张三三");
s.setBj(new Banji(1,"超越班"));

WebContext context = new WebContext(request, response, getServletContext());
context.setVariable("stu", s);
templateEngine.process("index", context, response.getWriter());

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>

4. 对象语法糖

        我们发现频繁的写stu会比较麻烦所以我们可以进行以下操作:

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

然后:之后我们就可以在子标签上通过*{属性名}的方式,获取student中的属性。

<form action="" method="post" th:object="${stu}">
    <span th:text="*{sid}">100</span>
	<input th:value="*{sname}" value="xxx"/><br>
	<input th:value="*{birthday}" value="xxx"/><br>
	<input th:value="*{score}" value="xxx"/><br>
    <span th:text="*{bj.classname}">xxx班</span>
</form>

5. 全局对象

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

6. 三元运算符

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

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

        特殊的三元元素夫——值  ?: 默认值

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

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

7. 逻辑判断

使用  th:if 或者 th:unless 进行逻辑判断(th:if 和 th:unless 表达相反的结果)  

<span th:if="${session.stu.age} < 18">未成年</span>
<span th:if="${session.stu.age} >= 18">成年</span>

8..1 循环控制   (***)

Thymeleaf中使用 th:each 指令完成与java中的增强for循环类似

<table border="1">
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>生日</th>
        <th>性别</th>
    </tr>
    <tr th:each="t,stat:${stulist}">
        <td th:text="${stat.count}">1</td>  -- 元素个数 (与数据库表中的主键无关)
        <td th:text="${t.sname}">汤姆</td>
        <td th:text="${#dates.format(t.birthday,'yyyy-MM-dd')}">2222-2-22</td>
        <td th:text="${t.ssex}==1?'男':'女'">2</td>
    </tr>
</table>

8.2 循环控制

        th:each = "变量,状态 :集合"

状态对象包含以下属性:

• index,从0开始的角标
• count,元素的个数,从1开始
• size,总元素个数
• current,当前遍历到的元素
• even/odd,返回是否为奇偶,boolean值 even偶数,odd奇数
• first/last,返回是否为第一或最后,boolean值

9. 字符串拼接

普通字符串的拼接:
<span th:text="'欢迎您:' + ${session.stu.sname} + '!'"></span>

简化后:
<span th:text="|欢迎您:${session.stu.sname}|"></span>

10. 在超链接中使用动态数据

        对表中的数据进行修改删除时,我们需要用到超链接,并且每个超链接中携带的参数值是不同的。

        语法:th:href = "@{xxx(key=value,key2=value2,...)}"

<table border="1">
		<tr>
			<th>学生编号</th>
			<th>学生姓名</th>
			<th>学生生日</th>
			<th>学生性别</th>
			<th>操作</th>
		</tr>
		<tr th:each="t,x : ${slist}">
			<td th:text="${x.count}"></td> -- 学生个数
			<td th:text="${t.sname}"></td>
			<td th:text="${#dates.format(t.birthday,'yyyy-MM-dd')}">2222-2-22</td>
			<td th:text="${t.ssex}==1 ? '男':'女'"></td>
			<td><a th:href="@{delstu.do(sid=${t.sid},sname=${t.sname})}">删除</a></td>
		</tr>
	</table>

11. 在html内容中使用动态数据

        语法:[[${xxx}]]

<h1>你好,我是[[${session.stu.sname}]]</h1>

        

        以上我个人对引擎模板的了解和介绍,同时针对Thymeleaf中常用的指令进行的简单的介绍,希望对大家有所帮助。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值