Skip to content

表达式工具对象

除了上述基础对象外,Thymeleaf 还提供了一组工具对象,帮助我们在表达式中完成各类常用操作。这些工具对象同样以 # 开头引用,核心工具对象及用途如下:

工具对象功能说明
#execInfo获取当前正在处理的模板的信息(如模板名称、模板模式等)
#messages在变量表达式中获取外部化消息,功能等价于 #{…} 消息表达式语法
#uris对 URL/URI 片段进行转义处理(如处理特殊字符)
#conversions执行配置的转换服务(若有),实现数据类型转换
#dates处理 java.util.Date 对象:格式化、提取年/月/日等组件
#calendars#dates 功能类似,但针对 java.util.Calendar 对象
#temporals处理 JDK8+ 中 java.time API(LocalDate/LocalDateTime 等)的日期时间对象
#numbers格式化数值对象(如设置小数位数、千分位分隔符等)
#strings处理 String 对象:包含判断、前缀/后缀判断、拼接/截取等
#objects通用的对象处理方法(如空值判断、获取对象类名等)
#bools布尔值相关的评估方法(如逻辑判断、布尔值转换等)
#arrays数组处理方法(如长度获取、是否包含元素、转集合等)
#listsList 集合处理方法(如判空、获取大小、过滤、排序等)
#setsSet 集合处理方法(如判空、去重、交集/并集等)
#mapsMap 集合处理方法(如获取键值、判空、遍历等)
#aggregates对数组/集合进行聚合操作(如求和、求平均值、找最大值等)
#ids处理可能重复的 id 属性(如迭代生成元素时的 id 去重)

各工具对象提供的具体方法可参考附录 B

核心用法解释

  1. 工具对象的调用方式: 工具对象通过 #{工具对象名.方法名(参数)} 调用,例如:
    html
    <!-- 格式化 Date 对象为指定格式 -->
    <span th:text="${#dates.format(today, 'yyyy-MM-dd')}">2024-01-01</span>
    
    <!-- 判断字符串是否为空或空白 -->
    <span th:text="${#strings.isEmpty(username) ? '匿名用户' : username}">张三</span>
    
    <!-- 格式化数字为保留2位小数 -->
    <span th:text="${#numbers.formatDecimal(price, 1, 2)}">99.99</span>
  2. 工具对象的核心价值: 无需在控制器中提前处理数据(如日期格式化、字符串判空),直接在模板中完成通用操作,简化后端代码,同时保持模板逻辑的完整性。
  3. 版本适配说明
    • #dates/#calendars 适配传统的 Date/Calendar 类;
    • #temporals 专为 JDK8+ 的 java.time 新日期 API 设计,是推荐的日期处理方式。

总结

  1. Thymeleaf 提供的工具对象覆盖了日期、字符串、数值、集合等全场景的通用操作,以 # 开头调用,是模板中处理数据的“便捷工具库”。
  2. 工具对象能减少控制器的重复代码,直接在模板中完成数据格式化、判空、聚合等操作,提升开发效率。
  3. 不同工具对象针对不同数据类型(如 #dates 对应 Date、#temporals 对应 java.time),需根据项目的 JDK 版本和数据类型选择使用。