首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

th:each

th:each 是 Thymeleaf 模板引擎中的一个迭代标签,用于在 HTML 页面中循环遍历集合或数组,并对每个元素执行相应的操作。Thymeleaf 是一个 Java 模板引擎,广泛应用于 Web 开发中,特别是在 Spring Boot 项目中。

基础概念

th:each 标签允许你在 HTML 中嵌入循环逻辑,它可以遍历任何实现了 Iterable 接口的对象,如列表(List)、集合(Set)或数组。它的基本语法如下:

代码语言:txt
复制
<div th:each="item, iterStat : ${collection}">
    <!-- 使用 item 变量访问当前迭代的元素 -->
    <!-- iterStat 是一个迭代状态对象,提供了额外的信息,如当前索引、是否为第一个或最后一个元素等 -->
</div>

优势

  1. 简洁性th:each 提供了一种简洁的方式来遍历集合,避免了在控制器中编写复杂的逻辑。
  2. 可读性:通过在 HTML 中直接展示迭代逻辑,代码更加直观易懂。
  3. 灵活性:可以与 Thymeleaf 的其他表达式和属性结合使用,实现更复杂的页面渲染需求。

类型

th:each 主要有两种使用方式:

  • 简单迭代:仅遍历集合中的元素。
  • 带状态迭代:除了遍历元素外,还提供了一个迭代状态对象(iterStat),该对象包含当前迭代的索引、是否为第一个或最后一个元素等信息。

应用场景

  • 列表渲染:在电商网站中显示商品列表。
  • 表格数据填充:在后台管理系统中展示数据库记录。
  • 动态表单生成:根据用户输入的数量动态生成表单项。

示例代码

假设我们有一个包含用户信息的列表,我们想要在页面上显示每个用户的姓名和邮箱:

代码语言:txt
复制
// 控制器中的代码
@GetMapping("/users")
public String listUsers(Model model) {
    List<User> users = userService.getAllUsers();
    model.addAttribute("users", users);
    return "user-list";
}
代码语言:txt
复制
<!-- user-list.html -->
<table>
    <thead>
        <tr>
            <th>姓名</th>
            <th>邮箱</th>
        </tr>
    </thead>
    <tbody>
        <tr th:each="user, iterStat : ${users}">
            <td th:text="${user.name}"></td>
            <td th:text="${user.email}"></td>
        </tr>
    </tbody>
</table>

遇到的问题及解决方法

问题:在使用 th:each 迭代时,页面显示为空,没有数据渲染出来。

原因

  1. 集合为空:传递给模板的集合实际上是空的。
  2. 变量名错误:在 th:each 中使用的变量名与控制器中添加到模型的属性名不匹配。
  3. Thymeleaf 表达式错误:可能存在语法错误或其他问题导致表达式无法正确解析。

解决方法

  1. 检查集合内容:确保控制器中传递给模型的集合确实包含了数据。
  2. 核对变量名:确认 th:each 中使用的变量名与模型中的属性名完全一致。
  3. 调试表达式:使用浏览器的开发者工具检查页面源代码,查看 Thymeleaf 表达式是否被正确替换为实际值。

通过以上步骤,通常可以定位并解决 th:each 使用中遇到的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

13分24秒

jQuery教程-25-each函数

10分11秒

jQuery教程-26-each循环json

15秒

海盗船在咖啡中战斗

领券