Skip to content

4.10 比较器与相等判断

表达式中的值可以通过 ><>=<= 符号进行大小比较,也可通过 ==!= 运算符判断相等/不相等。需要注意的是:XML 规范规定属性值中不能直接使用 <>,需替换为实体引用 &lt;(对应 <)和 &gt;(对应 >)。

html
<!-- 判断数值大于 1(XML 中用 &gt; 替代 >) -->
<div th:if="${prodStat.count} &gt; 1">
  数量大于 1 时显示
</div>

<!-- 相等判断 + 三元表达式(判断执行模式) -->
<span th:text="'Execution mode is ' + ( (${execMode} == 'dev')? 'Development' : 'Production')">
  Execution mode is Development
</span>

为了避免 XML 实体引用的繁琐,Thymeleaf 为这些运算符提供了文本别名,是日常开发的首选方式:

运算符含义文本别名示例(等价写法)
>大于gt${num > 10}${num gt 10}
<小于lt${num < 10}${num lt 10}
>=大于等于ge${num >= 10}${num ge 10}
<=小于等于le${num <= 10}${num le 10}
==等于eq${execMode == 'dev'}${execMode eq 'dev'}
!=不等于neq/ne${execMode != 'dev'}${execMode ne 'dev'}
!非(取反)not${!isAdmin}${not isAdmin}
别名用法示例
html
<!-- 用 gt 替代 >,无需写 &gt;,更简洁 -->
<div th:if="${prodStat.count} gt 1">
  数量大于 1 时显示
</div>

<!-- 用 eq 替代 ==,结合三元表达式 -->
<span th:text="'Execution mode is ' + (${execMode} eq 'dev' ? 'Development' : 'Production')">
  Execution mode is Development
</span>

<!-- 用 ne 替代 !=,判断不等于 -->
<div th:if="${user.status} ne 'DISABLED'">
  非禁用用户可见
</div>

关键注意事项

  1. XML 兼容性优先: 若模板文件是 .xml 或严格的 XHTML 格式,必须避免直接使用 </>,优先用 lt/gt 别名;.html 模板虽可直接用 </>,但推荐统一用别名,提升代码兼容性和可读性。

  2. 相等判断的类型一致性==/eq 会严格判断类型(如 ${10 == '10'} 结果为 false),若需弱类型比较,需手动转换类型:

    html
    <!-- 弱类型比较:先转字符串再判断 -->
    <div th:if="${#strings.toString(num) eq '10'}">...</div>
  3. null 值的相等判断: 判断变量是否为 null 时,用 == null/eq null 均可,推荐用别名更统一:

    html
    <div th:if="${user.name} eq null">姓名未设置</div>

总结

  1. Thymeleaf 支持 >/</>=/<=(大小比较)和 ==/!=(相等判断),XML 中需替换 </>&lt;/&gt;
  2. 推荐使用文本别名(gt/lt/ge/le/eq/ne)替代运算符,避免 XML 兼容问题,代码更简洁;
  3. 相等判断是严格类型比较,null 值判断可直接用 eq null/ne null