英文水平较差,斗胆翻译,希望对大家有用,欢迎批评指正。
本指南将指导您了解一些最重要的概念,以便用标准或 Spring 的方式去编写 Thymeleaf 模板。这并不是个完整的教程,但会给您比较全面的 Thymeleaf 使用体验。
1.Standard dialects?
待翻译
2.标准表达式
大多数的 Thymeleaf 属性允许设置值或使用表达式。我们称之为标准表达式方言。五种类型的表达式:
${...} : 变量表达式
*{...} : 选择表达式 #{...} : 国际化 (i18n) 表达式 @{...} : 链接 (URL) 表达式 ~{...} : 片段表达式2.1.变量表达式
变量表达式是 OGNL 表达式或 Spring EL,如果你把 Thymeleaf 集成到 Spring 中,执行上下文中的变量,在Spring的行话中叫做模型属性,他看起来像这样:
${session.user.name}
如果你要找的属性值或它的部分,具体取决于属性:
上面的表达式相当于(在OGNL和SpringEL)的:
((Book)context.getVariable("book")).getAuthor().getName()
在实际场景中我们不但要找到变量表达式和输出,还需要更复杂的处理,如条件,迭代...
这里 ${books} 从上下文中选择名为books的变量,并将其中的每个值使用 th:each 进行循环。
2.2.选择表达式
选择表达式就像变量表达式,除了它们将在先前选择的对象而不是整个上下文变量上执行。 他们看起来像这样:
*{customer.name}
对象来自 th:object 中的属性
... ... ...
就如同:
{ // th:object="${book}" final Book selection = (Book) context.getVariable("book"); // th:text="*{title}" output(selection.getTitle());}
2.3.国际化 (i18n) 表达式
消息表达式(通常称为文本外部化,国际化或i18n)允许我们从外部源(.properties文件)中检索特定于区域的消息,通过键引用它们(可选地)应用一组参数。
在Spring应用程序中,这将自动与Spring的MessageSource机制集成。
#{main.title}
#{message.entrycreated(${entryId})}
您可以在以下模板中找到它们:
... | ... | ...
---|
注意,如果希望消息键由上下文变量的值确定,或者要将变量指定为参数,则可以在消息表达式中使用变量表达式:
#{${config.adminWelcomeKey}(${session.user.name})}
2.4.链接 (URL) 表达式
链接表达式旨在构建URL并向他们添加有用的上下文和会话信息(通常称为URL重写的过程)。
因此,对于部署在Web服务器/ myapp上下文中的Web应用程序,可以使用以下表达式:
...
可以转换成这样的东西:
...
或者即使这样,如果我们需要保持会话和cookie未启用(或服务器还不知道):
...
网址也可以参数:
...
导致这样的事情:
...
链接表达式可以是相对的,在这种情况下,没有应用程序上下文将被前缀到URL:
...
也是服务器相对(再次,没有应用程序上下文作为前缀):
...
和协议相关(就像绝对URL一样,但浏览器将使用正在显示的页面中使用的相同的HTTP或HTTPS协议):
...
当然,链接表达式可以是绝对的:
...
但等待,绝对(或协议相对)URL ...什么是Thymeleaf链接表达式添加? 容易:由响应过滤器定义的URL重写的可能性:在基于Servlet的Web应用程序中,对于输出的每个URL(上下文相对,相对,绝对...)Thymeleaf将始终调用HttpServletResponse.encodeUrl(...)机制 在显示URL之前。 这意味着过滤器可以通过包装HttpServletResponse对象(常用机制)来为应用程序执行定制的URL重写。
2.5.片段表达式
片段表达式是表示标记片段的简单方法,并将其移动到模板周围。 由于这些表达式,片段可以被复制,传递给其他模板是参数,等等。
最常见的用法是使用 th:insert
或 th:replace
:
...
但它们可以在任何地方使用,就像任何其他变量一样:
片段表达式可以有参数:
2.6.字面值和操作
有很多类型的文字和操作可用:
- Literals:
- Text literals:
'one text'
,'Another one!'
,… - Number literals:
0
,34
,3.0
,12.3
,… - Boolean literals:
true
,false
- Null literal:
null
- Literal tokens:
one
,sometext
,main
,…
- Text literals:
- Text operations:
- String concatenation:
+
- Literal substitutions:
|The name is ${name}|
- String concatenation:
- Arithmetic operations:
- Binary operators:
+
,-
,*
,/
,%
- Minus sign (unary operator):
-
- Binary operators:
- Boolean operations:
- Binary operators:
and
,or
- Boolean negation (unary operator):
!
,not
- Binary operators:
- Comparisons and equality:
- Comparators:
>
,<
,>=
,<=
(gt
,lt
,ge
,le
) - Equality operators:
==
,!=
(eq
,ne
)
- Comparators:
- Conditional operators:
- If-then:
(if) ? (then)
- If-then-else:
(if) ? (then) : (else)
- Default:
(value) ?: (defaultvalue)
- If-then:
2.7.表达式预处理
待翻译
3.一些基本属性
待翻译
4.想了解更多?
Then the tutorial is what you’re looking for!
----------------------------------------------------------------------------
未完,待续。。。
官方原文: