基本编程java(王牌编程语言Java模板引擎Thymeleaf详解)
基本编程java(王牌编程语言Java模板引擎Thymeleaf详解)不新增标签,只需增强属性完美支持HTML5使用浏览器直接打开页面Thymeleaf使用Spring框架的模块,与许多常见的工具集成在一起,并且可以插入自己的功能,是现代HTML5 JVM Web开发的理想选择,尽管Thymeleaf还有更多其它的功能。Thymeleaf建立在自然模板的概念之上,以不影响模板作为设计原型的方式将其逻辑注入到模板文件中。 这改善了设计沟通,弥合了前端设计和开发人员之间的理解偏差。二、使用Thymeleaf的三大理由:简洁漂亮,易于理解。
IT技术研习社,专注互联网技术研究与分享,喜欢的朋友可以点击【关注】;把经验传递给有梦想的人;
Thymeleaf
一、简介Thymeleaf是一种用于Web和独立环境的现代服务器端的Java模板引擎。
官网:https://www.thymeleaf.org/
Thymeleaf的主要目标是将优雅的自然模板带到开发工作流程中,并将HTML在浏览器中正确显示,并且可以作为静态原型,让开发团队能更容易地协作。Thymeleaf能够处理HTML,XML,JavaScript,CSS甚至纯文本。
Thymeleaf使用Spring框架的模块,与许多常见的工具集成在一起,并且可以插入自己的功能,是现代HTML5 JVM Web开发的理想选择,尽管Thymeleaf还有更多其它的功能。Thymeleaf建立在自然模板的概念之上,以不影响模板作为设计原型的方式将其逻辑注入到模板文件中。 这改善了设计沟通,弥合了前端设计和开发人员之间的理解偏差。
二、使用Thymeleaf的三大理由:
简洁漂亮,易于理解。
完美支持HTML5使用浏览器直接打开页面
不新增标签,只需增强属性
三、Thymeleaf可以处理什么样的模板?
开箱即用,Thymeleaf可以处理六种模板,每种模板都称为模板模式:
HTML
XML
TEXT
JAVASCRIPT
CSS
RAW
有两种标记模板模式(HTML和XML),三种文本模板模式(TEXT,JAVASCRIPT和CSS)和一种无操作模板模式(RAW)。
HTML模板模式将允许任何类型的HTML输入,包括HTML5,HTML4和XHTML。 将不会执行验证或格式检查,并且在输出中尽可能地遵守模板代码/结构。
XML模板模式将允许XML输入。 在这种情况下,代码应该是格式良好的 - 没有未封闭的标签,没有未加引号的属性等等,如果发现格式错误,解析器将会抛出异常。 请注意,将不会执行验证(针对DTD或XML模式)。
TEXT模板模式将允许对非标记性质的模板使用特殊语法。 这种模板的例子可能是文本电子邮件或模板文档。 请注意,HTML或XML模板也可以作为TEXT处理,在这种情况下,它们不会被解析为标记,而每个标记,DOCTYPE,注释等都将被视为纯文本。
JAVASCRIPT模板模式将允许处理Thymeleaf应用程序中的JavaScript文件。这意味着能够像在HTML文件中一样使用JavaScript文件中的模型数据,但是使用特定于JavaScript的集成(例如专门转义或自然脚本)。 JAVASCRIPT模板模式被认为是文本模式,因此使用与TEXT模板模式相同的特殊语法。
CSS模板模式将允许处理Thymeleaf应用程序中涉及的CSS文件。类似于JAVASCRIPT模式,CSS模板模式也是文本模式,并使用TEXT模板模式中的特殊处理语法。
四、方言:标准方言
Thymeleaf是一个非常容易扩展的模板引擎(事实上,它可以被称为模板引擎框架),允许您定义和定制模板将被处理到一个很好的细节水平的方式。
一个将某些逻辑应用于标记工件(标签,一些文本,注释或者仅仅是模板不是标记的占位符)的对象被称为处理器,而这些处理器的集合(可能还有一些额外的工件)是方言组成。 开箱即用,Thymeleaf的核心库提供了一种称为"标准方言"的方言,对大多数用户来说应该是足够的。
本教程涵盖了标准方言。 您将在后面的页面中了解的每个属性和语法功能均由该方言定义,即使未明确提及。
当然,如果用户想利用库的高级功能定义自己的处理逻辑,用户可以创建自己的方言(甚至扩展标准方言)。Thymeleaf也可以配置为一次使用几种方言。
标准方言的大多数处理器是属性处理器。 这允许浏览器甚至在被处理之前正确显示HTML模板文件,因为它们将简单地忽略附加属性。 例如,虽然使用标记库的JSP可能包含不能直接由浏览器显示的代码片段,例如:
<form:inputText name="username" value="${user.name}" />
Thymeleaf标准方言将允许实现相同的功能:
<input type="text" name="userName" value="e-learn" th:value="${user.name}" />
这不仅可以被浏览器正确显示,而且还允许(可选地)在浏览器中静态打开原型时指定一个值属性(本例中为"e-learn"),在处理模板期间被${user.name}的评估结果值所取代。
这有助于设计人员和开发人员使用完全相同的模板文件,并减少将静态原型转换为工作模板文件所需的工作量。 这样做的能力是一个称为自然模板的功能。
五、整体架构
Thymeleaf的核心是DOM处理引擎。具体来说,它使用自己的高性能DOM实现-不是标准的DOMAPI-用于构建模板的内存树表示,稍后通过遍历节点并在其上执行修改DOM的处理器来操作它们。当前配置和传递给模板的数据集,用于表示-称为上下文。
使用DOM模板表示使其非常适合Web应用程序,因为Web文档通常表示为对象树(实际上DOM树是浏览器在内存中表示网页的方式)。此外,基于大多数Web应用程序仅使用几十个模板的想法,这些模板不是大文件,并且在应用程序运行时它们通常不会更改,Thymeleaf使用内存缓存的已解析模板DOM树允许它在生产环境中快速,因为大多数模板处理操作都需要很少的I/O(如果有的话)。
然而,存在一个限制:与其他模板解析/处理方法相比,这种架构还需要为每个模板执行使用更大量的内存空间,这意味着您不应该使用该库来创建大数据XML文档(而不是网络文件)。作为一般经验法则(并且始终取决于JVM的内存大小),如果您在单个模板执行中生成大小在几十兆字节的XML文件,则可能不应该使用Thymeleaf。
六、标准表达式语法
消息
即通常的国际化属性:#{msg}用于获取国际化语言翻译值。例如:
<title th:text="#{user.title}"></title>
变量
使用方法:直接使用th:xx="s}"获取对象属性。例如:
<form id="userForm"> <input id="id" name="id" th:value="${user.id}"/> <input id="username" name="username" th:value="${user.username}"/> <input id="password" name="password" th:value="${user.password}"/> </form> <div th:text="hello"></div> <div th:text="${user.username}"></div>
选择表达式
使用方法:首先通过th:object 获取对象,然后使用th:xx="*{}"获取对象属性。
这种简写风格极为清爽,推荐大家在实际项目中使用。例如:
<form id="userForm" th:object="${user}"> <input id="id" name="id" th:value="*{id}"/> <input id="username" name="username" th:value="*{username}"/> <input id="password" name="password" th:value="*{password}"/> </form>
链接URL
使用方法:通过链接表达式@{}直接拿到应用路径,然后拼接静态资源路径。例如:
<script th:src="https://img.aigexing.com@{/webjars/jquery/jquery.js}"></script> <link th:href="@{/webjars/bootstrap/css/bootstrap.css}" rel="stylesheet" type="text/css">
文字
###文字文字
文本文字只是在单引号之间指定的字符串。它们可以包含任何字符,但您应该将其中的任何单引号转义为\'。
</p> Now you are looking at a <span th:text="'working web application'">template file</span>. </p>
###数字文字
数字文字看起来与它们完全相同:数字。
<p>The year is <span th:text="2013">1492</span>.</p> <p>In two years,it will be <span th:text="2013 2">1494</span>.</p>
附加文本
文本,无论是文字还是评估变量或消息表达式的结果,都可以使用 运算符轻松附加:
th:text="'The name of the user is ' ${user.name}"
字面替换
文字替换允许轻松格式化包含变量值的字符串,而无需附加文字'...' '...'。
这些替换必须用竖线(|)包围,如:
这实际上相当于:
<span th:text="'Welcome to our application ' ${user.name} '!'">
文字替换可以与其他类型的表达相结合:
<span th:text="${onevar} ' ' |${twovar} ${threevar}|">
注意:${...}在|...|文字替换中只允许使用变量表达式()。没有其他文字('...'),布尔/数字标记,条件表达式等。
算术运算符
一些算术运算也可用: ,-,*,/和%。
th:with="iseven=(${prodStat.count} % 2 == 0)"
请注意,这些运算符也可以应用于OGNL变量表达式本身(在这种情况下,将由OGNL而不是Thymeleaf标准表达式引擎执行):
th:with="isEven=${prodStat.count % 2 == 0}"
请注意,其中一些运算符存在文本别名:div(/),mod(%)。
比较器和平等
在表达式中的值可以与进行比较>,<,>=和<=符号,像往常一样,也是==和!=运营商可以被用于检查平等(或缺乏)。请注意,XML确定不应在属性值中使用<和>符号,因此应将它们替换为<和>。
th:if="${prodStat.count} > 1" th:text="'Execution mode is ' ( (${execMode} == 'dev')? 'Development' : 'Production')"
请注意,其中一些运算符存在文本别名:gt(>),lt(<),ge(>=),le(<=),not(!)。还eq(==),neq/ ne(!=)。
条件表达式
条件表达式仅用于评估两个表达式中的一个,具体取决于评估条件的结果(它本身是另一个表达式)。
让我们看一个示例片段(这次引入另一个属性修饰符th:class):
<tr th:class="${row.even}? 'even' : 'odd'"> ... </tr>
条件表达式(condition,then和else)的所有三个部分本身都是表达式,这意味着它们可以是变量(${...},*{...}),消息(#{...}),URL(@{...})或文字('...')。
条件表达式也可以使用括号嵌套:
<tr th:class="${row.even}? (${row.first}? 'first' : 'even') : 'odd'"> ... </tr>
也可以省略其他表达式,在这种情况下,如果条件为false,则返回null值:
<tr th:class="${row.even}? 'alt'"> ... </tr>
IT技术研习社,专注互联网技术研究与分享,喜欢的朋友可以点击【关注】;把经验传递给有梦想的人;