使用控制器模型变量和 Thymeleaf 动态调用 messages.properties
Posted
技术标签:
【中文标题】使用控制器模型变量和 Thymeleaf 动态调用 messages.properties【英文标题】:Calling messages.properties dynamically with controller model variable and Thymeleaf 【发布时间】:2020-07-23 12:21:36 【问题描述】:我的 messages.properties 是这样的:
tablas.menu.paises=Pa\u00EDses
tablas.menu.regiones=Regiones
tablas.menu.anhos=A\u00F1os
tablas.menu.universidades=Universidades
tablas.menu.usuarios=Usuarios
在 .html 中,我有一个菜单,其中包含 th:each:
<li class="nav-item" th:each="menu : $menus">
<a th:text="#tablas.menu.$menu.nombre"></a>
</li>
对于每个“$menus 中的菜单”,menu.nombre 具有值 paises、regiones、anhos... 但是 thymeleaf 无法识别 # 中的模型变量,当它没有找到消息时,它在视图中给了我错误:
??tablas.menu.$menu.nombre_es_ES??
配置没问题,如果我更改 #tablas.menu.regiones 的调用,我会得到“区域”等。 有没有办法使用这样的模型变量动态地从 messages.properties 调用消息?
谢谢。
【问题讨论】:
试试 Thymeleaf preprocessor。因此,例如:_$menu.nombre_
.
该死的,非常感谢,我不知道这个功能,它可以工作。 th:text="#tablas.menu.__$menu.nombre__" 工作完美。
感谢您纠正我的错字 - 双下划线是必需的,而不是单打。
【参考方案1】:
您可以为此使用#messages
utility object:
<a th:text="$#messages.msg('tablas.menu.' + menu.nombre)" />
或者您可以使用literal substitution 创建字符串:
<a th:text="#|tablas.menu.$menu.nombre|" />
我建议仅将预处理作为最后的手段,因为错误的值会导致运行时错误。 (尽管他们确实为此工作。)
【讨论】:
以上是关于使用控制器模型变量和 Thymeleaf 动态调用 messages.properties的主要内容,如果未能解决你的问题,请参考以下文章
从 Thymeleaf 调用并加载 Spring MVC 控制器请求方法
IntelliJ中的Spring boot + thymeleaf:无法解析变量
使用 Thymeleaf 从 Spring 模型设置 JavaScript 变量