一尘不染

JSP中的JSTL循环可用于嵌套的非列表

jsp

MVC-
Servlet将请求转发到JSP。在servlet中,我创建了类别列表(java.util.List),将此列表附加到servlet上下文中,并将请求转发到JSP页面:

public class Category{
       private Integer id;
       private String name;
       private Category parentCategory;
       ...
       //getters and setters
    }

此类表示类别/子类别(如果parentCategory字段为null,则它是顶级类别)。具有相同父级的类别是其子类别,并且它们映射到JSP中的嵌套无序列表。示例:结果应类似于下一个HTML代码:

<ul class="droprightMenu">  
            <li><a href="#">Category 1</a>
                <ul class="droprightMenu">
                    <li><a href="#">Category 1.1</a></li>
                    <li><a href="#">Category 1.2</a></li>
                    <li><a href="#">Category 1.3</a></li>
                          <ul class="droprightMenu">
                                <li><a href="#">Category 1.3.1</a></li>
                                <li><a href="#">Category 1.3.2</a></li>
                                <li><a href="#">Category 1.3.3</a></li>
                                <li><a href="#">Category 1.3.4</a></li>
                          </ul> 
                    <li><a href="#">Category 1.4</a></li>
                </ul>
            </li>
            <li><a href="#">Category 2</a></li>
            <li><a href="#">Category 3</a></li>
                <ul class="droprightMenu">
                    <li><a href="#">Category 3.1</a></li>
                    <li><a href="#">Category 3.2</a></li>
                          <ul class="droprightMenu">
                                <li><a href="#">Category 3.2.1</a></li>
                                <li><a href="#">Category 3.2.2</a></li>
                          </ul> 
                    <li><a href="#">Category 3.3</a></li>
                    <li><a href="#">Category 3.4</a></li>
                </ul>
            <li><a href="#">Category 4</a></li>
    </ul>

我不知道如何在JSP中遍历此列表。可能应该使用不同的JSTL循环或JSP scriptlet的某种组合来完成,也许要进行一些递归。感谢任何帮助。


阅读 308

收藏
2020-06-10

共1个答案

一尘不染

您需要像这样填充模型:

public class Category{
   private Integer id;
   private String name;
   private Category parentCategory;

   private List<Category> subCategories;

   ...
   //getters and setters
}

在Servlet中,您需要具有类别LEVEL 1的LIST(Parent为NULL)。

List<Category> rootCategories = getAllCategoriesLevel1();
request.setAttribute("rootCategories",  rootCategories );

在JSP中(需要3个循环或4,5个循环)

<c:forEach items="${rootCategories}" var="categoryLevel1">

    // ...

    <c:forEach items="${categoryLevel1.subCategories}" var="categoryLevel2">

        // ...

        <c:forEach items="${categoryLevel2.subCategories}" var="categoryLevel3">

            // ...

        </c:forEach>

        // ...

    </c:forEach>

    // ...

</c:forEach>
2020-06-10