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
相关产品推荐
相关产品推荐

