快捷搜索:  汽车  科技

基本编程java(王牌编程语言Java模板引擎Thymeleaf详解)

基本编程java(王牌编程语言Java模板引擎Thymeleaf详解)不新增标签,只需增强属性完美支持HTML5使用浏览器直接打开页面Thymeleaf使用Spring框架的模块,与许多常见的工具集成在一起,并且可以插入自己的功能,是现代HTML5 JVM Web开发的理想选择,尽管Thymeleaf还有更多其它的功能。Thymeleaf建立在自然模板的概念之上,以不影响模板作为设计原型的方式将其逻辑注入到模板文件中。 这改善了设计沟通,弥合了前端设计和开发人员之间的理解偏差。二、使用Thymeleaf的三大理由:简洁漂亮,易于理解。

IT技术研习社,专注互联网技术研究与分享,喜欢的朋友可以点击【关注】;把经验传递给有梦想的人;

Thymeleaf

一、简介

Thymeleaf是一种用于Web和独立环境的现代服务器端的Java模板引擎。

官网:https://www.thymeleaf.org/

基本编程java(王牌编程语言Java模板引擎Thymeleaf详解)(1)

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技术研习社,专注互联网技术研究与分享,喜欢的朋友可以点击【关注】;把经验传递给有梦想的人;

基本编程java(王牌编程语言Java模板引擎Thymeleaf详解)(2)

猜您喜欢: