【问题标题】:How to iterate for X items in Thymeleaf?如何在 Thymeleaf 中迭代 X 项?
【发布时间】:2014-11-23 22:59:37
【问题描述】:

我有模板,其中四个li 元素我应该有一个ul 元素。我该怎么做?现在我有类似的东西:

<div th:each="excursion,iterStat : ${excursions}">
    <ul th:if="${iterStat.index}/4 == 0">
        <li>
            <a th:href="@{/excursion/{id}(id=${excursion.excursionId})}"><img src="/template/images/garden1.jpg" alt="Image" /></a>
            <h2 th:text="${excursion.title}"></h2>
            <p th:text="${#strings.abbreviate(excursion.description,128)}"></p>
        </li>
    </ul>
</div>

我认为if 条件将应用于elvery ul 元素,但它隐藏了所有内容,包括li 元素。

【问题讨论】:

  • 所以你想要一个全新的无序列表为每个项目而不是列表中的一个新行?
  • 我需要包含四个元素的列表。实现它的一种方法是为每四个元素创建一个列表。但我希望有一种方法可以只用一个列表来做我想做的事情。
  • 如果您需要一个包含 4 个元素的列表,那么 th:if="${iterStat.index}/4 == 0" 的用途是什么?除非 index = 0,否则它永远不会起作用。如果您想要包含 4 个元素的列表,则只需迭代 4 次。我会为你添加答案。
  • 看来 OP 真的在问stackoverflow.com/questions/17812372/…。但是,如果您在这里(像我一样)因为您希望只显示前 X 项,那么第一个接受的答案有效,除了这些天,您不能在 th:if 中使用

标签: thymeleaf


【解决方案1】:

根据您的 cmets,您需要一个包含 4 个项目的列表,下面将解决此问题。如果您遇到问题,请告诉我

<ul>
<div th:each="excursion,iterStat : ${excursions}" th:if="${iterStat.index}<5">    
        <li>
            <a th:href="@{/excursion/{id}(id=${excursion.excursionId})}"><img src="/template/images/garden1.jpg" alt="Image" /></a>
            <h2 th:text="${excursion.title}"></h2>
            <p th:text="${#strings.abbreviate(excursion.description,128)}"></p>
        </li>    
</div>
</ul>

编辑 1: 基于所提供数据的进一步审查产生了另一种可能性。 在传递之前使用 Map 而不是 Controller 中的批量列表:

Map<String, List<Excursion>> excursionsList;

确保将每次短途旅行限制为 4 次(根据需要)。 然后在 Thymeleaf 中遍历地图。

<div th:each="excursion,rowStat : *{excursionsList}">
<ul>
<div th:each="list,iterStat : *{excursion[__${rowStat.index}__].value}">
//your code for each list item information such as excursionId, description etc.
</div>
</ul>
</div>

这应该清理您的代码堆并根据需要进行处理。

【讨论】:

  • 我有超过 4 次短途旅行(例如 5 次或 10 次)。我想将此列表拆分为 ul 列表,每个列表有 4 个元素。您的代码将仅显示前 4 条记录。
  • 好的,我认为您需要重写您的问题以澄清您到底在做什么,很难清楚地理解。我假设您正在寻求实现某种类型的模数,以便每 4 次迭代创建一个新列表?对吗?
  • 发表了我的答案。如果你可以只用一个列表重写它,我会选择你的答案。
  • 我想我有一个更简单、更简单、更优雅的解决方案。早上我给你写点东西。
  • @Dracontis 我的第二个示例有帮助吗?
【解决方案2】:

我为实现我的目标所做的一切。控制器:

@RequestMapping( "/" )
public String index( Model model ) {
    List<Excursion> excursions = excursionDao.findAll();
    List<List<Excursion>> excursionsLists = new LinkedList<List<Excursion>>();
    List<Excursion> tempList = new LinkedList<Excursion>();

    int listSize = excursions.size();
    for ( int i = 0; i < listSize; i++ ) {
        tempList.add( excursions.get( i ) );
        if ( listSize == ( i+1 ) || tempList.size() == 4 ) {
            excursionsLists.add( tempList );
            tempList = new LinkedList<Excursion>();
        }
    }

    model.addAttribute( "excursionsLists", excursionsLists );
    return "index";
}

还有百里香模板:

<ul th:each="excursionsList : ${excursionsLists}">
    <li th:each="excursion : ${excursionsList}">
        <a th:href="@{/excursion/{id}(id=${excursion.excursionId})}"><img src="/template/images/garden1.jpg" alt="Image"/></a>
        <h2 th:text="${excursion.title}"></h2>
        <p th:text="${#strings.abbreviate(excursion.description,128)}"></p>
    </li>
</ul>

【讨论】:

    猜你喜欢
    • 2018-05-06
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2014-01-23
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多