Thymeleaf片段中动态引用Model带编号属性的实现问题
解决Thymeleaf动态获取Model属性的问题
你遇到的核心问题是:之前的写法只是拼接出了test_1这类变量名字符串,但没有把它作为Model中的变量去读取实际值。这里给你两种可行的解决方法:
方法一:预处理+变量表达式
利用Thymeleaf的预处理(__...__)先拼接出完整的变量名,再通过${}获取对应属性值,写法如下:
th:text="${__${'test_' + number}__}"
原理是:预处理会先执行__${'test_' + number}__,把它解析成test_1(假设number的值是1),然后外层的${}就会去Model中查找名为test_1的属性并取出值。
方法二:使用#vars对象直接获取
Thymeleaf提供了#vars对象,可以通过键名直接获取Model中的属性,写法更直观:
th:text="${#vars.get('test_' + number)}"
这种方式不需要预处理,直接拼接出属性键名后,调用get()方法就能拿到对应的值。
为什么之前的写法无效?
- 第一种
th:with="i='test_' +${number}" th:text="${i}":这里的i只是存储了字符串test_1,不是对Model变量的引用,所以输出的就是字符串本身。 - 第二种
th:text="'test_' + ${number}":本质是字符串拼接操作,没有触发Model属性的读取逻辑。 - 第三种
th:text="${'test_'+__${number}__}":预处理的范围不对,只处理了${number}部分,最终还是在拼接字符串,没有形成有效的变量引用。
内容的提问来源于stack exchange,提问作者larjae
相关产品推荐
相关产品推荐

