如何使用thymeleaf th:each。同时迭代两个列表。
<select id="rooms" th:field="*{room}">
<option th:each="room : ${roomsFromHotel}"
th:value="${{room}}"
th:text="${room.id}">
room name
</option>
</select>
这是有效的,但我想做这样的事情
<select id="rooms" th:field="*{room}">
<option th:each="room : ${roomsFromHotel}, roomType : ${roomTypesList}"
th:value="${{room}}"
th:text="${roomType.name}">
room name
</option>
</select>
答案 0 :(得分:4)
不幸的是你无法这样做。
我现在可以想到的两个选项:
如果列表大小相同且索引对应同一个对象,则将它们放在Map中并迭代映射。这样你就可以得到房间和房间类型
(首选)创建一个对象并在其中保存room和roomType,然后将其添加到单个List并迭代列表。
我更喜欢第二种方法,因为您可以保证您实际传入列表并进入视图层进行处理。
答案 1 :(得分:0)
要在@Aeseir答案的第二个选项上进行扩展,我发现最好用room和roomType在控制器方法内部创建内部类。这样,您就不会堆积项目结构,而只有一个一次性使用的对象,在这种情况下,这是理想的。