You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf:如何判断动态key对应的消息是否为空或不存在

问题与解决方案

问题背景

通过Java类为Thymeleaf提供messages.properties的key(i为th:each循环变量),当前实现可正常渲染消息:

  • HTML代码:
th:text="#{${i.nameKey}}"
  • Java代码:
public String getNameKey() {
    // getKeyPrefix()根据类属性生成唯一名称
    return getKeyPrefix() + ".name";
}

需要判断该key对应的消息值是否为空或不存在,尝试以下代码时无法正常运行:

th:if="${#messages.msg(i.nameKey) != null AND NOT #string.isEmpty(#messages.msg(i.nameKey))}"

核心问题:存在工具类名称写错的问题,且重复调用方法易引发逻辑冗余。

可行解决方案

方案1:用临时变量存储消息值(推荐)

通过th:with将消息值存入临时变量,避免重复调用#messages.msg(),同时简化判断逻辑:

<div th:with="msgContent=${#messages.msg(i.nameKey)}"
     th:if="${msgContent != null AND NOT #strings.isEmpty(msgContent)}">
    <!-- 此处放置需要渲染的内容 -->
</div>

方案2:修正工具类名称并简化判断

Thymeleaf的字符串工具类是#strings而非#string,修正后可直接使用#strings.isNotEmpty()方法(该方法会同时检查值不为null且非空字符串):

th:if="${#strings.isNotEmpty(#messages.msg(i.nameKey))}"

如果要保留原逻辑的写法,修正工具类名称即可:

th:if="${#messages.msg(i.nameKey) != null AND NOT #strings.isEmpty(#messages.msg(i.nameKey))}"

内容的提问来源于stack exchange,提问作者INJG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:20:24