教程:使用 Thymeleaf

教程:使用 Thymeleaf

8.4 删除模板片段返回示例应用,让我们重新看一下我们产品列表模板的最新版本:

NAME PRICE IN STOCK COMMENTS
Onions 2.41 yes

2 comment/s

th:href="@{/product/comments(prodId=${prod.id})}"

th:unless="${#lists.isEmpty(prod.comments)}">view

这段代码作为模板是完全没问题的,但作为一个静态页面(当直接由浏览器打开而不经过Thymeleaf处理时),它不是一个好的原型。

为什么?因为尽管浏览器可以正确显示,这张表格只有一行,而这行数据是模拟数据。作为一个原型,它的外观显然不够真实……我们需要展示不止一个产品,我们需要更多行.

那么我们添加几行吧:

NAME PRICE IN STOCK COMMENTS
Onions 2.41 yes

2 comment/s

th:href="@{/product/comments(prodId=${prod.id})}"

th:unless="${#lists.isEmpty(prod.comments)}">view

Blue Lettuce 9.55 no

0 comment/s

Mild Cinnamon 1.99 yes

3 comment/s

view

好了,现在我们有了三行,原型效果明显更好了。但是……当我们用Thymeleaf处理这段代码时会发生什么?:

NAME PRICE IN STOCK COMMENTS
Fresh Sweet Basil 4.99 yes

0 comment/s

Italian Tomato 1.25 no

2 comment/s

view

Yellow Bell Pepper 2.50 yes

0 comment/s

Old Cheddar 18.75 yes

1 comment/s

view

Blue Lettuce 9.55 no

0 comment/s

Mild Cinnamon 1.99 yes

3 comment/s

view

最后两行是模拟数据!当然如此:只有第一行应用了循环,所以Thymeleaf没有理由删除另外两行。

我们需要一种方法在模板处理过程中删除这两行。让我们在第二和第三行使用th:remove属性来实现这一点标签:

NAME PRICE IN STOCK COMMENTS
Onions 2.41 yes

2 comment/s

th:href="@{/product/comments(prodId=${prod.id})}"

th:unless="${#lists.isEmpty(prod.comments)}">view

Blue Lettuce 9.55 no

0 comment/s

Mild Cinnamon 1.99 yes

3 comment/s

view

一旦处理完成,一切都会恢复应有的样子:

NAME PRICE IN STOCK COMMENTS
Fresh Sweet Basil 4.99 yes

0 comment/s

Italian Tomato 1.25 no

2 comment/s

view

Yellow Bell Pepper 2.50 yes

0 comment/s

Old Cheddar 18.75 yes

1 comment/s

view

那个all属性中的值意味着什么?th:remove可以根据其值的不同表现出五种行为方式:

all:移除包含标签及其所有子元素。body:不移除包含标签,但移除其所有子元素。tag:移除包含标签,但不移除其子元素。all-but-first:移除包含标签的所有子元素,除了第一个以外。none:不执行任何操作。该值对于动态评估很有用。那个all-but-first值有什么用处?它将让我们在原型设计时节省一些th:remove="all"时间:

NAME PRICE IN STOCK COMMENTS
Onions 2.41 yes

2 comment/s

th:href="@{/product/comments(prodId=${prod.id})}"

th:unless="${#lists.isEmpty(prod.comments)}">view

Blue Lettuce 9.55 no

0 comment/s

Mild Cinnamon 1.99 yes

3 comment/s

view

这个th:remove属性可以接受任意Thymeleaf标准表达式类型的值,只要它返回一个允许的字符串值(all, tag, body, all-but-first或none)。

这意味着移除操作可以是条件性的,例如:

Link text not to be removed请注意,th:remove会将null视为none的同义词,因此以下写法与上面示例的作用相同:

Link text not to be removed在这种情况下,如果${condition}为 false,null将被返回,因此不会执行任何移除操作。

相关推荐

英雄联盟皇子吕布皮肤特效展示及购买建议
365体育app手机版安全下载

英雄联盟皇子吕布皮肤特效展示及购买建议

📅 07-03 👁️ 6076
厘米和寸的换算
365bet下载地址

厘米和寸的换算

📅 08-26 👁️ 1863
深潜即刻大半年了,今天突发奇想表达一下我对UP主停更潮这件事