整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

可能是最全的Thymeleaf参考手册(十三):文字模板模式

字语法


在Thymeleaf的三种模板模式被认为是文字TEXTJAVASCRIPTCSS。这将它们与标记模板模式区分开:HTMLXML


文本模板模式和标记模式之间的主要区别在于,在文本模板中,没有标签可以插入属性形式的逻辑,因此我们必须依靠其他机制。


这些机制的第一个也是最基本的是内联的,我们已经在上一章中进行了详细介绍。内联语法是在文本模板模式下输出表达式结果的最简单方法,因此,这是文本电子邮件完美有效的模板。

 Dear [(${name})],

  Please find attached the results of the report you requested
  with name "[(${report.name})]".

  Sincerely,
    The Reporter.

即使没有标签,上面的示例也是一个完整且有效的Thymeleaf模板,可以在 TEXT 模板模式下执行。


但是,为了包含比单纯的输出表达式更复杂的逻辑,我们需要一种新的非基于标记的语法:

[# th:each="item : ${items}"]
  - [(${item})]
[/]

实际上是更冗长的精简版本:

[#th:block th:each="item : ${items}"]
  - [#th:block th:utext="${item}" /]
[/th:block]

请注意,这种新语法是如何基于声明为的元素(即可处理标签)[#element ...] 而不是 <element ...>。元素以 [#element ...] 开头,以 [/element] 闭合,并且可以通过 / 将开始元素最小化来声明独立标签,该方式几乎等同于XML标签:[#element ... /]


标准方言仅包含用于以下元素之一的处理器:th:block,尽管我们可以在方言中对此进行扩展并以通常的方式创建新元素。另外,th:block 元素([#th:block ...] ... [/th:block])可以缩写为空字符串([# ...] ... [/]),因此上述代码块实际上等效于:

[# th:each="item : ${items}"]
  - [# th:utext="${item}" /]
[/]

给定 [# th:utext="${item}" /] 等效于内联的未转义表达式,我们可以使用它来减少代码量。因此,我们结束了上面看到的代码的第一个片段:

[# th:each="item : ${items}"]
  - [(${item})]
[/]

请注意,文本语法要求元素对称(没有未关闭的标签)和带引号的属性 – XML样式比HTML样式更多。


我们来看一个更完整的TEXT模板示例,即纯文本电子邮件模板:

Dear [(${customer.name})],

This is the list of our products:

[# th:each="prod : ${products}"]
   - [(${prod.name})]. Price: [(${prod.price})] EUR/kg
[/]

Thanks,
  The Thymeleaf Shop

执行后,其结果可能类似于:

Dear Mary Ann Blueberry,

This is the list of our products:

   - Apricots. Price: 1.12 EUR/kg
   - Bananas. Price: 1.78 EUR/kg
   - Apples. Price: 0.85 EUR/kg
   - Watermelon. Price: 1.91 EUR/kg

Thanks,
  The Thymeleaf Shop

JAVASCRIPT 模板模式下的另一个示例(greeter.js文件)将作为文本模板进行处理,然后从HTML页面调用该结果。请注意,这不是HTML模板中的 <script> 块,而是 .js 单独作为模板处理的文件:

var greeter = function() {

    var username = [[${session.user.name}]];

    [# th:each="salut : ${salutations}"]    
      alert([[${salut}]] + " " + username);
    [/]

};

执行后,其结果可能类似于:

var greeter = function() {

    var username = "Bertrand \"Crunchy\" Pear";

      alert("Hello" + " " + username);
      alert("Ol\u00E1" + " " + username);
      alert("Hola" + " " + username);

};


转义元素属性


为了避免与模板的其他部分可能会以其他方式处理的交互(例如,HTML模板内的文本模式),Thymeleaf 3.0允许转义其文本语法中元素的属性。所以:

  • TEXT 模板模式下的属性将采用HTML转义。
  • JAVASCRIPT 模板模式下的属性将是JavaScript非转义的。
  • CSS 模板模式下的属性将采用CSS换码。


因此,这在文本模式模板中是完全可以的(请注意 >):

 [# th:if="${120<user.age}"]
     Congratulations!
 [/]

当然,< 在实际的文本模板中这没有任何意义,但是如果我们用包含上面代码的th:inline="text" 代码块来处理HTML模板,并且希望确保我们的浏览器在静态打开文件作为原型时,不使用 <user.age 作为起始标记的名称。


可扩展性


这种语法的优点之一是它与标记语法一样可扩展。开发人员仍然可以使用自定义元素和属性来定义自己的方言,为它们应用前缀(可选),然后在文本模板模式下使用它们:

 [#myorg:dosomething myorg:importantattr="211"]some text[/myorg:dosomething]


纯文本原型注释块:添加代码


JAVASCRIPT CSS 模板模式(不适用于 TEXT),允许包括一个特殊的注释语法之间的代码 /*[+...+]*/,这样Thymeleaf会处理模板时自动取消注释这样的代码:

var x = 23;

/*[+

var msg  = "This is a working application";

+]*/

var f = function() {
    ...

将解析为:

var x = 23;

var msg  = "This is a working application";

var f = function() {
...

也可以在这些注释中包含表达式,它们将被评估:

var x = 23;

/*[+

var msg  = "Hello, " + [[${session.user.name}]];

+]*/

var f = function() {
...


文本解析器级注释块:删除代码


在类似于仅原型的注释块的方式,所有三个文本模板模式(TEXTJAVASCRIPT CSS)使其能够指示Thymeleaf特殊时间移除代码/*[- */ /* -]*/ 标志,就像这样:

var x = 23;

/*[- */

var msg  = "This is shown only when executed statically!";

/* -]*/

var f = function() {
...

或在 TEXT 模式下:

...
/*[- Note the user is obtained from the session, which must exist -]*/
Welcome [(${session.user.name})]!
...


自然的JavaScript和CSS模板


如之前所述,JavaScript和CSS内联提供了将内联表达式包含在JavaScript / CSS注释中的可能性,例如:

...
var username = /*[[${session.user.name}]]*/ "Sebastian Lychee";
...

解析后结果为:

...
var username = "John Apricot";
...

实际上,可以将这种将内联表达式包含在注释中的相同技巧可用于整个文本模式语法:

/*[# th:if="${user.admin}"]*/
    alert('Welcome admin');
/*[/]*/

如果模板是静态打开的(因为它是100%有效的JavaScript),并且如果用户是管理员运行模板,则将在上面的代码中显示该警报。它等效于:

[# th:if="${user.admin}"]
   alert('Welcome admin');
[/]

实际上是模板解析期间初始版本转换成的代码。


但是请注意,注释行中的换行元素不会像内联表达式那样,清除其所在的行(直到一直在右边找到a ;为止)。这种行为只适用于内联输出表达式。


因此Thymeleaf 3.0允许以自然模板的形式开发复杂的JavaScript脚本和CSS样式表,这些模板既可以作为原型也可以作为工作模板使用。

TML文本格式化

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>文档标题</title> 
</head> 
<body>

<b>加粗文本</b><br><br>
<i>斜体文本</i><br><br>
<code>电脑自动输出</code><br><br>
这是 <sub> 下标</sub> 和 <sup> 上标</sup>

</body>
</html>

输出:

其他格式:

<strong>这个文本是加粗的</strong>

<em>这个文本是斜体的</em>

<big>这个文本字体放大</big>

<small>这个文本是缩小的</small>

HTML文本格式化标签

标签

描述

<b>

定义粗体文本

<em>

定义着重文字

<i>

定义斜体字

<small>

定义小号字

<strong>

定义加重语气

<sub>

定义下标字

<sup>

定义上标字

<ins>

定义插入字

<del>

定义删除字

HTML“计算机输出”标签

标签

描述

<code>

定义计算机代码

<kbd>

定义键盘码

<samp>

定义计算机代码样本

<var>

定义变量

<pre>

定义预格式文本

HTML引文,引用,及标签定义

标签

描述

<abbr>

定义缩写

<address>

定义地址

<bdo>

定义文字方向

<blockquote>

定义长的引用

<q>

定义短的引用语

<cite>

定义引用、引证

<dfn>

定义一个定义项目。

个好的文本编辑器对于想要建立网站或进行编码的任何人都是必不可少的。这对于习惯于面面俱到的环境的Mac开发人员而言更加明显。对于他们来说存在一系列不同的优质软件之选。今天小编将介绍几款Mac上好用的HTML文本编辑器,对于每一款文本编辑器,小编将对对其中的亮点和不足之处进行了简单的描述。

Atom(免费)

Atom被公认为Mac上最好的免费文本编辑器,以Node.js进行编写,并嵌于GitControl中。它可以作为单纯的Mac文本编辑器使用,也可以作为源代码编辑器来使用。通过插件程序的使用,此应用支持很多语言,如HTML, CSS, C/C++, Objective-C, Java, Go, C#, JavaScript, Python, PHP, Perl, XML, Mustache, Clojure, Ruby等等,使之成为了现代开发人员的有用工具。

其部分有用的功能包括多标签编辑,自动完成,多面板组,一个文件系统浏览器,优秀的导航选项,以及软件包管理器。此外,Atom的一项非常重要的功能在于数以万计的虚拟免费软件包的可用性,其充分增强了它的功能性。

它的用户界面非常友好,同时还提供一系列不同的主题可供用户根据自己的喜好来选择可视化环境。

一般而言,Atom可谓是明智之选,尤其是对于MEAN网页开发人员而言。


Visual Studio(免费)

像Atom一样,Visual Studio Code是一个功能强大的综合应用程序,可以作为HTML编辑器使用。VS Code是一款轻量级的文本和脚本编辑器,以扩展对插件的支持为概念,与Microsoft的功能强大的Visual Studio不会混淆。

有一些插件可用于在Code中编写和运行Shell脚本,编写Markdown文档,甚至编写AppleScript。那就对了; 您可以使用Microsoft的文本编辑器来创建仅在Apple计算机上运行的脚本。

但是轻量级的Visual Studio意味着对插件的依赖,但是它具有响应能力,您不用在意那些永远不会使用的功能。


MacVim (免费)

MacVim是一个将Vim程序员编辑器带入Mac的项目。另一方面,Vim基于强大的Vi应用程序,这是一个为Unix操作系统开发的文本编辑器。除了其他功能之外,MacVim应用程序还支持使用热键,包括全屏模式,允许您使用透明背景等等。

尽管Vim已内置到操作系统中,仍有很多人对MacVim感兴趣。它具有功能完整的菜单栏控件和比Apple维护的Vim更新的版本,对于新手来说,还算友好!

Sublime Text

Sublime Text是一款商业化的Mac文本编辑器。这款编辑器采用了Python应用程序接口(API),并支持多种语言。此外,它的功能性通过插件的形式进一步予以强化,这些插件通常是由社团进行开发的,根据免费软件许可予以开放使用。Sublime Text拥有超级友好的界面,有22种不同的主题可供选择。在其众多有趣功能当中有一项被称为免分心模式,在该模式下,屏幕中心只包含文本。

其他的功能包括建立在简单的JSON文件基础之上的高级定制功能;以及分割编辑,也即编辑能够在两个不同的文件或一个文件的不同部分之间完成。简单来说,它的快速文件和文本行导航,它的跨平台支持,以及以项目为本的参数选择,使得这款应用经常被评为“最佳Mac文本编辑器”。


TextMate

强大,简单且轻巧的TextMate是许多Mac专业人士的首选,不难理解为什么。该编辑器支持多种语言和语法,选项卡以及特定于语言的方法,可以节省您的时间和精力。

TextMate包含摘要,宏和作用域确定功能,可在不逐步进入完整IDE范围的情况下极大地加快工作流程。开发人员旨在将“ Apple的操作系统方法带入文本编辑器世界”,这是为什么这么多人喜欢TextMate的一个很好的总结。

这是一个易于使用的简单工具,界面简洁,价格合理。尽管开发有时会停滞不前,但TextMate仍然坚持不懈地追随专业用户。


BBEdit

它是典型的Mac文本编辑器,与TextWrangler来自同一开发人员。尽管缺少Atom的新鲜度或Sublime Text中清晰的UI,但BBEdit是针对macOS从头开始构建的,针对该平台进行了优化,并采用Mac方式进行文本编辑。

这意味着对于普通的Mac用户来说,键盘快捷键是有意义的,以及遵循Apple的许多设计敏感性的文本编辑方法。它还支持Bonjour等Mac技术。这消除了其他应用程序中出现的一些进入障碍,但导致UI与其竞争对手相比更加笨拙。

BBEdit非常适合HTML和文本编辑,并支持通过FTP / SFTP进行远程编辑。该应用程序高度可定制,从语法着色到菜单选项,用户定义的功能,键盘快捷键以及直接在该应用程序中的macOS终端支持。


什么是最好的HTML文本编辑器?它不一定是功能最多的那个。但一定是最适合您工作方式的那一个。小编建议您在决定之前先进行一些测试,找到最适合自己的那款!

(来自Mac下载macz.com)