Thymeleaf教程:使用th:each的迭代状态

需积分: 40 41 下载量 67 浏览量 更新于2024-08-07 收藏 1.47MB PDF 举报
"Thymeleaf官方文档中文版" 在Thymeleaf中,`th:each` 是一个非常重要的指令,用于在HTML模板中进行循环遍历,通常用于列表或数组的数据展示。这个指令允许开发者在表格、列表或其他HTML元素中动态地渲染数据。在描述中提到的6.2保持迭代状态,主要讲述的是在`th:each`循环中如何利用状态变量来获取和控制迭代过程中的信息。 状态变量是在`th:each`属性中定义的,包含以下关键属性: 1. **index**: 当前迭代的索引,从0开始。这可以用来区分循环中的不同元素,例如,你可以通过索引来决定何时应用某些CSS样式或执行特定的操作。 2. **count**: 同样表示当前迭代的索引,但这个是从1开始的。这在你需要从1开始计数的场景下会更有用。 3. **size**: 迭代变量中元素的总量。这个属性可以用来判断是否是最后一次迭代,或者用于计算百分比等。 4. **current**: 每次迭代的当前元素。这个变量可以直接引用,以便在循环内部访问当前元素的属性。 5. **even/odd**: 两个布尔属性,表示当前迭代是否是偶数或奇数。这对于交替改变行的样式非常有用,比如在表格中实现行的条纹效果。 6. **first/last**: 分别指示当前迭代是否是第一次或最后一次。这些属性在处理首尾元素时特别有用,比如添加特殊的CSS类或者执行特定的逻辑。 在给定的示例中,我们可以看到如何在HTML表格中使用这些状态变量: ```html <table> <tr> <th>NAME</th> <th>PRICE</th> <th>IN STOCK</th> </tr> <tr th:each="prod,iterStat : ${prods}" th:class="${iterStat.odd}? 'odd'"> <td th:text="${prod.name}">Onions</td> <td th:text="${prod.price}">2.41</td> <td th:text="${prod.inStock}? #{true} : #{false}">yes</td> </tr> </table> ``` 在这个例子中,`th:each="prod,iterStat : ${prods}"`定义了迭代,`prod`是当前元素,而`iterStat`是状态对象。`th:class="${iterStat.odd}? 'odd'"`利用`odd`属性来切换行的CSS类,实现交替行的颜色变化。`th:text`指令则用于动态设置单元格的内容,如产品名称、价格和库存状态。 Thymeleaf作为现代的Java模板引擎,它的设计目标是提供一种优雅且易于维护的方式来创建模板,同时兼容多种模板模式,如HTML、XML、文本、JavaScript和CSS。它允许你在模板中注入逻辑,而不破坏模板的原始结构,使得设计师和开发者可以更有效地协作。Thymeleaf支持HTML5标准,允许处理各种类型的HTML输入,并能处理非HTML标记的文本模板,如JavaScript和CSS文件。在处理JavaScript模板时,Thymeleaf提供了专门的JavaScript集成,以便在JavaScript文件中使用模型数据。