Раскрывающееся меню не заполняется, где моя ошибка? - PullRequest
0 голосов
/ 10 марта 2020

Итак, я боролся за 2 дня, чтобы понять, в чем моя ошибка. Мой выпадающий список не заполняется данными из базы данных. Я использую Java EE и Mysql.

. Я могу без проблем вставить данные в базу данных, но когда я получаю их по какой-то причине, jsp не выполняет свою работу правильно, так что я всегда получайте выпадающий пустой. Вот таблица, которую я использую:

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

Rhis - это сервлет, который я использую, и метод для выполнения запроса. Как видите, я возвращаю список объектов, а затем добавляю его в качестве атрибута запроса в метод 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>

РЕДАКТИРОВАТЬ Таким образом, я создал этот жестко закодированный метод тестирования для тестирования своего кода и добавляю его в качестве параметра запроса идентично тому, как я добавил другой метод с запросом к БД. Мой DropDown все еще пуст, поэтому проблема может быть в том, как я пытаюсь показать элементы в jsp. Я думаю, что это может быть в l oop у меня есть.

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;

    }

1 Ответ

1 голос
/ 10 марта 2020

Похоже, ${categories} - пустая коллекция.

Сначала убедитесь, что вы импортировали библиотеку JSTL Core на страницу JSP. Это можно сделать, поместив

<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core" %>

вверху страницы JSP.

Кроме того, на стороне JSP можно проверить, если коллекция пусто, если где-то добавить:

<c:out value="${categories.size()}" />.

Кроме того, вы используете язык выражений непосредственно между тегами HTML <option>, поэтому вам также потребуется добавить:

<%@ page isELIgnored = "false" %>

в верхней части страницы JSP, чтобы сделать его доступным для соответствующего значения вместо рендеринга простого текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...