Thymeleaf中如何在th:each循环内用动态变量替换属性名
解决Thymeleaf动态拼接对象属性名的问题
要实现把images.foo0bar里的0替换为外层循环的索引值,你不能直接用${images.foo + index + bar}这种写法,得用Thymeleaf支持的动态属性访问方式结合字符串拼接来做,具体实现如下:
- 外层循环的
index是Thymeleaf的循环状态变量,要获取从0开始的索引值用index.count;如果需要从1开始的索引,就用index.index。 - 动态访问
images对象的属性时,改用方括号[]语法,把拼接好的属性名字符串作为参数传入。
修改后的完整代码:
<th:block th:each="someData, index : ${someData.from.somewhere}"> <th:block th:each="image : ${images['foo' + index.count + 'bar']}"> <img th:src="${image}"/> </th:block> <hr/> </th:block>
关键说明
- 当
index.count为0时,'foo' + index.count + 'bar'会拼接成foo0bar,和你原来的属性名完全匹配;索引为1时则拼接为foo1bar,以此类推。 - 方括号
[]是Thymeleaf中动态访问对象属性的标准写法,支持通过字符串表达式指定属性名,正好适配你这种动态拼接属性名的场景。
内容的提问来源于stack exchange,提问作者anjanesh
相关产品推荐
相关产品推荐

