You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:54:56