Spring Boot中Thymeleaf的th:each遍历失效问题求助
问题原因及修正方案
核心问题分析
你的代码存在两个关键错误,导致Thymeleaf渲染失败,页面内容无法显示:
1. 数据传递逻辑完全错误
Controller中,你把各个集合的名称字符串(比如"res_num_list")放到了testList里,然后传给前端的testArray。但HTML里却试图通过${testItem.room_list}这种方式访问属性——testItem本质是字符串,根本没有room_list这类属性,Thymeleaf无法解析这些表达式,直接跳过了整个循环块的渲染。
2. HTML标签结构不合法
你在<h4>和<dd>内部使用了<td>标签,<td>是表格单元格标签,只能嵌套在<tr>标签内,这种无效的HTML结构也会导致浏览器渲染异常。
修正步骤
第一步:创建实体类封装数据
先定义一个实体类,把每条预订信息的字段封装起来(比如命名为Reservation):
public class Reservation { private String resNum; private String hotelId; private String price; private String dateNum; private String inqDate; private String category; private String roomType; private String peopleNum; // 全参/无参构造方法 // 所有字段的getter和setter方法 }
第二步:重构Controller的数据传递逻辑
把每条预订数据封装成Reservation对象,再放到集合中传给前端:
List<Reservation> reservationList = new ArrayList<>(); // 添加第一条预订数据 Reservation res1 = new Reservation(); res1.setResNum("3"); res1.setHotelId("3"); res1.setPrice("3"); res1.setDateNum("3"); res1.setInqDate("20000101"); res1.setCategory("hotel"); res1.setRoomType("standard"); res1.setPeopleNum("2"); reservationList.add(res1); // 添加第二条预订数据 Reservation res2 = new Reservation(); res2.setResNum("4"); res2.setHotelId("4"); res2.setPrice("4"); res2.setDateNum("4"); res2.setInqDate("20000101"); res2.setCategory("hotel"); res2.setRoomType("standard"); res2.setPeopleNum("2"); reservationList.add(res2); // 将集合传给前端 model.addAttribute("reservations", reservationList);
第三步:修正HTML的渲染逻辑
去掉非法的<td>标签,正确遍历Reservation对象的属性:
<div th:each="res : ${reservations}"> <div class="review"> <div class="row"> <div class="col-md-9"> <div class="comment"> <div class="comment-title"> <h4 th:text="${res.hotelId}">酒店ID</h4> </div> <dl class="visitor-rating"> <dt>room type</dt> <dd th:text="${res.roomType}">标准间</dd> <dt>reservation date</dt> <dd th:text="${res.inqDate}">20000101</dd> <dt>staying date</dt> <dd th:text="${res.dateNum}">3天</dd> <dt>number of people</dt> <dd th:text="${res.peopleNum}">2人</dd> <dt>request</dt> <dd><textarea name="request" cols="55" rows="3"></textarea></dd> </dl> </div> </div> </div> </div> </div>
内容的提问来源于stack exchange,提问作者wojoo729
相关产品推荐
相关产品推荐

