关于spring:thymeleaf学习一

41次阅读

共计 2909 个字符,预计需要花费 8 分钟才能阅读完成。

规范表达式语法

  • ${…}: 变量表达式
  • *{…}: 抉择表达式
  • \#{…}: 音讯(i18n)表达式
  • @{…}:URL 表达式
  • ~{…}: 片段表达式

变量表达式

将 Thymeleaf 与 Spring 集成 - 在上下文变量(在 Spring 行话中也称为 Spring jargon)上执行

OGNL 表达式长这样:

${session.user.name}

他们能够作为属性的值,像这样:

<span th:text="${book.author.name}">

以上代码和这样是相等的(OGNL 和 SpEL 语言)

((Book)context.getVariable("book")).getAuthor().getName()

咱们能够应用迭代拜访变量

<li th:each="book : ${books}">

$ {books}从上下文中抉择称为 books 的变量,并将其评估为可迭代的变量,以在 th:each 循环中应用

抉择表达式

抉择表达式和变量表达式相似,而抉择表达式只能在先前抉择的对象上执行,不能全局执行
抉择表达式长这样:

*{customer.name}

它们作用的对象由 th:object 属性指定

<div th:object="${book}">
  ...
  <span th:text="*{title}">...</span>
  ...
</div>

等效于:

{// th:object="${book}"
  final Book selection = (Book) context.getVariable("book");
  // th:text="*{title}"
  output(selection.getTitle());
}

音讯表达式

常常称为 text externalization, internationalization 或者 i18n
音讯表达式容许咱们从 .properties 文件中检索特定于语言环境的音讯,通过键援用它们,并可选地利用一组参数。
他们长这样:

#{main.title}
#{message.entrycreated(${entryId})}

在模板中长这样:

<table>
  ...
  <th th:text="#{header.address.city}">...</th>
  <th th:text="#{header.address.country}">...</th>
  ...
</table>

如果心愿音讯关键字由上下文变量的值确定,或者心愿将变量指定为参数。
能够在音讯表达式内应用变量表达式,像这样:

#{${config.adminWelcomeKey}(${session.user.name})}

链接表达式

链接表达式用于构建 URL 并向其增加有用的上下文和会话信息(此过程通常称为 URL 重写)
一个网页利用部署在你的 web 服务器的 myapp 上下文,表达式长这样:

<a th:href="@{/order/list}">...</a>

他会被转换为:

<a href="/myapp/order/list">...</a>

如果咱们须要保留会话且未启用 Cookie(或服务器尚不晓得),请执行以下操作

<a href="/myapp/order/list;jsessionid=23fa31abd41ea093">...</a>

URL 还能够退出变量

<a th:href="@{/order/details(id=${orderId},type=${orderType})}">...</a>

他理论是会被转换为这样的:

<!-- Note ampersands (&) should be HTML-escaped in tag attributes... -->
<a href="/myapp/order/details?id=23&amp;type=online">...</a>

URL 表达式能够是绝对的,在这种状况下,没有应用程序上下文将作为 URL 的前缀:

<a th:href="@{../documents/report}">...</a>

也能够是服务器的绝对(同样也没有 URL 前缀)

<a th:href="@{~/contents/main}">...</a>

绝对协定(与相对 URL 雷同,但浏览器将应用与所显示页面雷同的 HTTP 或 HTTPS 协定):

<a th:href="@{//static.mycompany.com/res/initial}">...</a>

url 表达式也当然能够是相对的

<a th:href="@{http://www.mycompany.com/main}">...</a>

片段表达式

片段表达式是示意标记片段并在模板中应用它们的简略办法。
最常见的用处是应用 th:insert 或 th:replace 插入片段:

<div th:insert="~{commons :: main}">...</div>

能够在任何中央应用,像变量一样

<div th:with="frag=~{footer :: #main/text()}">
  <p th:insert="${frag}">
</div>

字面量和办法

  • 字面量:

    * 文本字面量:'one text', 'Another one!'
    * 数字字面量:0, 34, 3.0, 12.3,
    * 布尔字面量:true,false
    * 空关字面量:null
  • 文本操作:

    *   String concatenation: +
    *   Literal substitutions: |The name is ${name}|
  • 数学操作:

    *   Binary operators: +, -, *, /, %
    *   Minus sign (unary operator): -
  • 布尔操作符:

    *   Binary operators: and, or
    *   Boolean negation (unary operator): !, not
  • 比拟和相等:

    *   Comparators: >, <, >=, <= (gt, lt, ge, le)
    *   Equality operators: ==, != (eq, ne)
  • 条件操作:

    *   If-then: (if) ? (then)
    *   If-then-else: (if) ? (then) : (else)
    *   Default: (value) ?: (defaultvalue)
    

表达式预处理

预处理看起来像这样

#{selection.__${sel.code}__}

咱们看到的是一个表达式 ${sel.code},他将被事后执行,而后将其后果(如果是 ALL)selection.ALL 返回

一些根本属性

th:text替换标签的文本

<p th:text="#{msg.welcome}">Welcome everyone!</p>

th:each和 Java 的 forEach 雷同

<li th:each="book : ${books}" th:text="${book.title}">En las Orillas del Sar</li>

Thymeleaf 模拟的特定的 XHTML 和 HTML5 属性th:action, th:value, th:href

<form th:action="@{/createOrder}">
<input type="button" th:value="#{form.submit}" />
<a th:href="@{/admin/users}">

正文完
 0