简单条件
有的时候,模板的一部分仅在满足特定条件的情况下才能出现。
例如,假设我们要在产品表中显示一列,其中包含每个产品的评论数量,如果有评论,则指向该产品的评论详细信息页面的链接。
为了做到这一点,我们将使用以下 th:if 属性:
<table>
<tr>
<th>NAME</th>
<th>PRICE</th>
<th>IN STOCK</th>
<th>COMMENTS</th>
</tr>
<tr th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'">
<td th:text="${prod.name}">Onions</td>
<td th:text="${prod.price}">2.41</td>
<td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
<td>
<span th:text="${#lists.size(prod.comments)}">2</span> comment/s
<a href="comments.html"
th:href="@{/product/comments(prodId=${prod.id})}"
th:if="${not #lists.isEmpty(prod.comments)}">view</a>
</td>
</tr>
</table>
让我们把注意力,集中到最重要的一行上。
<a href="comments.html"
th:href="@{/product/comments(prodId=${prod.id})}"
th:if="${not #lists.isEmpty(prod.comments)}">view</a>
这将创建指向评论页面(URL为 /product/comments)的链接,其 prodId 参数为产品的 id,但前提是该产品要有评论。
看一下解析后的页面:
<table>
<tr>
<th>NAME</th>
<th>PRICE</th>
<th>IN STOCK</th>
<th>COMMENTS</th>
</tr>
<tr>
<td>Fresh Sweet Basil</td>
<td>4.99</td>
<td>yes</td>
<td>
<span>0</span> comment/s
</td>
</tr>
<tr class="odd">
<td>Italian Tomato</td>
<td>1.25</td>
<td>no</td>
<td>
<span>2</span> comment/s
<a href="/mall/product/comments?prodId=2">view</a>
</td>
</tr>
<tr>
<td>Yellow Bell Pepper</td>
<td>2.50</td>
<td>yes</td>
<td>
<span>0</span> comment/s
</td>
</tr>
<tr class="odd">
<td>Old Cheddar</td>
<td>18.75</td>
<td>yes</td>
<td>
<span>1</span> comment/s
<a href="/mall/product/comments?prodId=4">view</a>
</td>
</tr>
</table>
完美,这正是我们想要的效果!
请注意,th:if 属性不仅能评估布尔表达式,还有所超越,还能评估满足以下规则的表达式为 true。
-
如果 value 不为空:
-
-
如果value是一个布尔值并且是 true
-
如果value是一个数字且非零
-
如果value是一个字符并且非零
-
如果value是一个String且不是“false”,“off” 或 “no”
-
如果value不是布尔值,数字,字符或字符串。
-
-
如果value为null,则 th:if 的值为 false
另外,th:if 还有一个反义的属性 th:unless,我们可以在前面的示例中使用它,而不是在OGNL表达式内部使用 not:
<a href="comments.html"
th:href="@{/comments(prodId=${prod.id})}"
th:unless="${#lists.isEmpty(prod.comments)}">view</a>
Switch语句
还有一种和Java中的 Switch结构等效的条件性展示内容的方法:th:switch / th:case 属性集。
<div th:switch="${user.role}">
<p th:case="'admin'">User is an administrator</p>
<p th:case="#{roles.manager}">User is a manager</p>
</div>
请注意,一旦一个 th:case 属性的值为 true,同一swicth上下文中的所有其它 th:case 属性的值为 false。
默认选项指定为 th:case="*":
<div th:switch="${user.role}">
<p th:case="'admin'">User is an administrator</p>
<p th:case="#{roles.manager}">User is a manager</p>
<p th:case="*">User is some other thing</p>
</div>
公众号回复以下关键字,获取更多资源
SpringCloud进阶之路 | Java 基础 | 微服务 | JAVA WEB | JAVA 进阶 | JAVA 面试 | MK 精讲
笔者开通了个人微信公众号【银河架构师】,分享工作、生活过程中的心得体会,填坑指南,技术感悟等内容,会比博客提前更新,欢迎订阅。