Skip to content

布尔值工具(Booleans)

#bools 是 Thymeleaf 专为布尔值评估设计的工具对象,提供了空值安全、与 th:if 标签逻辑一致的布尔判断方法,同时支持数组/列表/集合的批量布尔运算(底层对应 org.thymeleaf.expression.Bools 类,可参考其 JavaDoc 获取完整 API)。

java
/*
 * ======================================================================
 * 请查阅 org.thymeleaf.expression.Bools 类的 Javadoc API 文档
 * ======================================================================
 */

/*
 * 以与 th:if 标签相同的规则评估一个条件(后续可参考条件评估章节)。
 * 该方法同样适用于数组、列表(List)或集合(Set)类型的参数。
 */
${#bools.isTrue(obj)}
${#bools.arrayIsTrue(objArray)}
${#bools.listIsTrue(objList)}
${#bools.setIsTrue(objSet)}

/*
 * 对条件进行取反评估。
 * 该方法同样适用于数组、列表(List)或集合(Set)类型的参数。
 */
${#bools.isFalse(cond)}
${#bools.arrayIsFalse(condArray)}
${#bools.listIsFalse(condList)}
${#bools.setIsFalse(condSet)}

/*
 * 评估条件并执行“与(AND)”运算。
 * 接收数组、列表(List)或集合(Set)类型的参数。
 */
${#bools.arrayAnd(condArray)}
${#bools.listAnd(condList)}
${#bools.setAnd(condSet)}

/*
 * 评估条件并执行“或(OR)”运算。
 * 接收数组、列表(List)或集合(Set)类型的参数。
 */
${#bools.arrayOr(condArray)}
${#bools.listOr(condList)}
${#bools.setOr(condSet)}

补充说明(贴合 Thymeleaf 布尔运算技术语境)

1. 核心术语解析

英文术语译法/说明
Bools布尔工具类(Thymeleaf 表达式工具,#bools 是其简写,专用于布尔值/条件的评估与运算)
evaluate a condition评估条件(按 Thymeleaf 标准规则判断“条件是否为真”,如 0/null/空集合判为 false)
th:if tag rulesth:if 标签规则(核心逻辑:非 null/非 false/非 0/非空集合/非空字符串判为 true)
negation取反(将“真”转为“假”,“假”转为“真”,等价于 ! 运算符)
AND/OR operator与/或运算符(数组/集合级别的批量运算:AND 要求所有元素为真才返回真;OR 只要有一个元素为真就返回真)

2. 关键逻辑解读(实战示例)

Thymeleaf 的布尔评估规则与 Java 原生布尔判断不同,核心是“贴近前端场景”,示例如下:

html
<!-- 1. 基础真假判断(遵循 th:if 规则) -->
<div th:with="
  num0=${0}, num1=${1}, 
  emptyList=${T(java.util.Collections).emptyList()},
  nonEmptyList=${#lists.toList(new Integer[]{1})}
">
  <!-- isTrue:0/空集合/空字符串/null 判为 false,其余为 true -->
  <div>#bools.isTrue(num0): <span th:text="${#bools.isTrue(num0)}"></span></div> <!-- false -->
  <div>#bools.isTrue(num1): <span th:text="${#bools.isTrue(num1)}"></span></div> <!-- true -->
  <div>#bools.isTrue(emptyList): <span th:text="${#bools.isTrue(emptyList)}"></span></div> <!-- false -->

  <!-- isFalse:对 isTrue 结果取反 -->
  <div>#bools.isFalse(num0): <span th:text="${#bools.isFalse(num0)}"></span></div> <!-- true -->

  <!-- 2. 数组/集合的 AND 运算(所有元素为真才返回真) -->
  <div th:with="boolArray=${#arrays.toArray(new Boolean[]{true, false, true})}">
    #bools.arrayAnd(boolArray): <span th:text="${#bools.arrayAnd(boolArray)}"></span> <!-- false -->
  </div>

  <!-- 3. 数组/集合的 OR 运算(任一元素为真就返回真) -->
  <div th:with="boolList=${#lists.toList(new Boolean[]{false, false, true})}">
    #bools.listOr(boolList): <span th:text="${#bools.listOr(boolList)}"></span> <!-- true -->
  </div>
</div>
  • 核心特性:
    • isTrue/isFalse 对单个值的判断规则与 th:if 完全一致(比如空字符串 "" 判为 false,非空字符串 "false" 判为 true);
    • arrayAnd/listAnd/setAnd:批量判断时,所有元素为真才返回真,只要有一个假则返回假;
    • arrayOr/listOr/setOr:批量判断时,只要有一个元素为真就返回真,所有元素为假才返回假。

3. 句式优化说明

  • 将“in the same way that it would be evaluated in a th:if tag”译为“以与 th:if 标签相同的规则评估”,避免直译“以在 th:if 标签中被评估的相同方式”的生硬感;
  • 补充“(List)”“(Set)”注释明确列表/集合类型,贴合新手对 Java 集合的认知;
  • 用“执行‘与(AND)’运算”“执行‘或(OR)’运算”替代直译“应用与/或运算符”,更符合“布尔运算”的技术表达习惯;
  • 保留 ${#bools.xxx} 表达式原样,注释简洁且突出“th:if 规则”“批量运算”等核心差异点。

总结

  1. #bools 核心作用:在 Thymeleaf 模板中按 th:if 规则评估布尔条件,支持单个值判断、取反,以及数组/集合的批量 AND/OR 运算;
  2. 核心用法分类:
    • 基础判断:isTrue(obj)(按 th:if 规则判真)、isFalse(cond)(对 isTrue 取反);
    • 批量 AND 运算:arrayAnd/listAnd/setAnd(所有元素为真才返回真);
    • 批量 OR 运算:arrayOr/listOr/setOr(任一元素为真就返回真);
  3. 关键注意点:布尔评估规则遵循 th:if 逻辑(非 null/非 0/非空集合等判为真),与 Java 原生布尔判断不同。