JSP中的JSTL循环用于嵌套的未编译列表

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代码类似:

  

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

您需要像这样填充模型:

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

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

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

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

  // ...  // ...  // ...  // ...  // ...  

如果您不知道类别树的深度,仍然可以使用递归生成菜单。

在前一个响应中使用与Loc相同的模型,您必须定义一个名为menuitem.jsp的jsp页面,它将以递归方式调用:

 
  • ${menuitem.name}
  • 在我们的主JSP页面中,初始化变量menuitem并包含jsp。

       
            
    ${subCategory.subCategoryName}
    ${subCategory.subCategoryName}

    我的子类别级别有限 – 到3级。所以,这是servlet中的代码:

     // findAll() - returns all categories in database, as a list List categories = categoryDao.findAll(); ServletContext servletContext = getServletContext(); servletContext.setAttribute("categories", categories); 

    这些是JSP页面中的循环,我从列表中提取数据并生成html标记:

      
  • Categories