当前位置: 首页 > 知识库问答 >
问题:

JSTL-在JSP中创建动态下拉菜单,从列表中提取数据(java.util.列表)

汝志
2023-03-14

MVC模式:servlet JSP页面。我有一个(基本)外观的class类别:

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

这个类应该代表类别-子类别的概念:一个类别可以有多个子类别,类别不需要有父类(顶级类别,父母类别字段为空),如果它是一个子类别,那么它的父母类别字段代表它的父类)。

在servlet中,我将数据库中的所有类别提取到java中。util。列出对象。然后,我将此列表附加到应用程序范围(servlet上下文)并将其转发到JSP页面。

List<Category> categories = categoryDao.findAll();
ServletContext servletContext = getServletContext();
servletContext.setAttribute("categories", categories);

现在,在JSP页面中,我有一个导航菜单,您可以在这里看到它:http://jsfiddle.net/vvozar/tMz9A/1/(请参阅jsfiddle link中的菜单查找)下拉菜单是HTML中的简单无序列表,其子菜单是某些菜单项下的嵌套无序列表。示例(静态):

<nav>
            <!-- Navigation -->
            <ul class="dropdownMenu">
                <li><a href="#">Home</a></li>

                <li><a href="#">Categories</a>
                    <ul class="droprightMenu">
                        <li><a href="#">All</a>
                            <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>
                                        <li><a href="#">Category 1.4</a></li>
                                    </ul></li>
                                <li><a href="#">Category 2</a></li>
                                <li><a href="#">Category 3</a></li>
                                <li><a href="#">Category 4</a></li>
                            </ul></li>
                        <li><a href="#">Manage</a></li>
                    </ul></li>

                <li><a href="#">Profile</a>
                    <ul class="droprightMenu">
                        <li><a href="#">Login</a></li>
                        <li><a href="#">Register</a></li>
                        <li><a href="#">Edit Profile</a></li>
                        <li><a href="#">My Posts</a></li>
                        <li><a href="#">Logout</a></li>
                    </ul></li>

                <li><a href="#">Help</a></li>
            </ul>
        </nav>

我想通过从列表中读取类别/子类别,按照类别层次结构创建这些菜单和子菜单(动态)。(具有相同父级的类别属于同一下拉菜单)。

JSTL循环创建类别菜单应该是什么样子?


共有2个答案

江凯风
2023-03-14

我将子类别深度级别限制为3。因此,JSTL循环是:

        <li><a href="#">Categories</a>
            <ul class="droprightMenu">
                <li><a href="#">All</a>
                    <ul class="droprightMenu">

                        <!-- first loop, extracting categories level 1  -->
                        <c:forEach items="${categories }" var="catLevel1">

                            <c:if test="${catLevel1.getParentCategory()==null }">
                                <li><a href="#">${catLevel1.getName() }</a> 

                                <!-- second loop, extracting categories level 2  -->
                                    <ul class="droprightMenu">
                                        <c:forEach items="${categories }" var="catLevel2">

                                            <c:if test="${catLevel2.getParentCategory().getId()==catLevel1.getId() }">
                                                <li><a href="#">${catLevel2.getName() }</a> 

                                                <!-- third loop, categories level 3  -->
                                                    <ul class="droprightMenu">
                                                        <c:forEach items="${categories }" var="catLevel3">

                                                            <c:if test="${catLevel3.getParentCategory().getId()==catLevel2.getId() }">
                                                                <li><a href="#">${catLevel3.getName() }</a></li>
                                                            </c:if>

                                                        </c:forEach>
                                                    </ul></li>
                                            </c:if>

                                        </c:forEach>
                                    </ul></li>
                            </c:if>
                        </c:forEach>

                    </ul></li>
            </ul></li>
蒋文光
2023-03-14

你知道子菜单的最大级别吗?

我觉得你应该试试脚本和递归

 类似资料:
  • 我想创建两个动态下拉列表框,但两个文本框的数据都来自API响应,而不是本地数据库。当我在第一个下拉列表中选择数据时,必须根据选择的数据进行REST调用,并且必须在第二个下拉列表中显示响应。有没有办法做到这一点? 我搜索这个很长时间,但我能够这样做,只使用本地数据库的数据。

  • 应用:Hibernate、Spring 3.0 MVC、JSP(使用Spring表单) 要求:使用Hibernate从数据库中选择一个表数据,并使用Spring MVC将其显示为JSP页面中的下拉列表。 代码:Hibernate/道代码是 烹饪课 食谱DaoImpl类 SpringMVC JSP页面: 在这样做时,我收到以下错误: 有人能建议如何解决这个问题吗?我已经检查了几篇文章,并试图复制它们

  • 我正在使用谷歌工作表。我有两张名为App Catgeory和目录类别。 应用类别有两列:-1.类别名称2.是可选择的 在目录类别中,我有一个类别选择下拉列表,它是从应用程序类别表的类别名称列创建的。“类别名称”列中的所有值在下拉列表中可用。下拉列表由以下数据验证公式创建:- 但是,我想要这样的类别名称在下拉列表中有是可选择的列值是在应用类别。如果是可选择的列值为否,则不需要在下拉列表中显示此类类别

  • 我在页面上有一个表单,用户可以在其中保存信息,还有一个下拉列表,可以从保存文件的目录中提取这些保存的文件。我想要的是当他们进入该页面时,当他们从下拉框中选择文件名时,它会将文件名放在输入框“CodeDescription”字段中,并将文件信息放在文本区域“Code”中,但我不确定如何解析该文件。下面是我当前的代码。 或者,相反地,我不介意在下拉菜单中选择正确的文件时,它只是在表单字段下面显示输出。

  • 我在Servlet中使用SortedMap来填充JSP中的下拉列表值,我有以下代码 在JSP中 我正在使用一个 JSP 页进行插入和更新。当我编辑页面时,如何将所选值设置为下拉列表,其中所选值将来自数据库。

  • 目前,我只能通过单击“Add”按钮在jsf中创建两个下拉列表。 最初我有一个表单有两个下拉列表,一个“添加”按钮和一个“提交”按钮。 请给我一些示例代码来做这件事。 谢谢