【问题标题】:Drop down menu not populating, where is my error?下拉菜单未填充,我的错误在哪里?
【发布时间】:2020-06-22 05:44:47
【问题描述】:

所以,我已经挣扎了 2 天来了解我的错误是什么。我的下拉列表未填充数据库中的数据。我正在使用 Java EE 和 MySQL。

我可以毫无问题地在数据库中插入数据,但是当我出于某种原因检索它时,jsp 无法正确执行它的操作,因此我总是将下拉列表设为空。 这是我正在使用的表格:

create table category(
    category_id int auto_increment,
    name varchar(30),
        primary key(category_id)
        );

这是我正在使用的 servlet 和执行查询的方法。如您所见,我正在返回一个对象列表,然后将其作为请求属性添加到 doGet 方法中。所以我想直到这里一切都应该正常。

public class DropDownServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {
        try {
            List<Category> categories = retrieveCategories();
            request.setAttribute("categories", categories);
            RequestDispatcher view = request.getRequestDispatcher("viewdropdown.jsp");
            view.forward(request, response);
        } catch (ClassNotFoundException | SQLException | IOException ex) {
            ex.printStackTrace();
        }
    }

    public static List<Category> retrieveCategories() throws ClassNotFoundException, SQLException {
        Connection conn = DatabaseConnection.initializeConnection();
        String query = "Select * from category";
        PreparedStatement pstmnt = conn.prepareStatement(query);
        List<Category> categories = new ArrayList<>();


        ResultSet rs = pstmnt.executeQuery();

        while (rs.next()) {

            int id = rs.getInt("category_id");
            String name = rs.getString("name");

            Category cat = new Category(id,name);
            categories.add(cat);

        }

        conn.close();
        return categories;
    }

这是带有下拉菜单的jsp,它不显示它应该显示的数据。

<html>

<head>
    <title>Dropdown page</title>
</head>

<body>
<h1>The names of the categories are the following:</h1>

<select id ="dropdown">
    <c:forEach items="${categories}" var="category">
        <option value = "${category.name}">${category.name}</option>
    </c:forEach>
</select>
    <br>
    <br>

</body>
</html>

编辑: 因此,我创建了这个硬编码的测试方法来测试我的代码,并将其添加为请求参数,这与我在 DB 查询中添加其他方法的方式相同。我的 DropDown 仍然是空的,所以问题可能出在我尝试在 jsp 中显示项目的方式上。我认为它可能在我的循环中。

public static List<Category> testMethod(){
        List<Category> list = new ArrayList<>();
        Category one = new Category(1,"Blue");
        Category two = new Category(2,"Red");
        list.add(one);
        list.add(two);

        return list;

    }

【问题讨论】:

  • 首先确定你的问题出在哪里。您可以通过在retrieveCategories() 中硬编码来在下拉列表中显示数据吗?如果是这样,那么您的问题在于从数据库中获取数据,否则就是将数据传递给 JSP。如果您查看您的代码并“猜测”一切都很好,那么您将永远无法到达任何地方,您需要实际尝试并测试您的代码。
  • 好的,谢谢,我会这样做的,我会告诉你的
  • 好的,所以我对对象进行了硬编码并将它们作为请求添加。我已在原始帖子中添加了已编辑的修改。它仍然是空的,所以它可能来自我显示数据的方式。

标签: java mysql jsp servlets dropdown


【解决方案1】:

看起来${categories} 是一个空集合。

首先,确保您已将 JSTL Core 库导入到您的 JSP 页面中。这是通过放置

&lt;%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core" %&gt;

在 JSP 页面的顶部。

此外,您可以通过添加某处来检查 JSP 端的集合是否为空:

&lt;c:out value="${categories.size()}" /&gt;.

此外,您在 HTML &lt;option&gt; 标记之间直接使用表达式语言,因此您还需要添加:

&lt;%@ page isELIgnored = "false" %&gt;

在 JSP 页面的顶部,使其可评估为适当的值,而不是呈现纯文本。

【讨论】:

  • 非常感谢,看来添加库 java.sun.com/jsp/jstl/core" %> 立即解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 2010-10-06
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
相关资源
最近更新 更多