Хобрук: Ваш путь к мастерству в программировании

Выпадающий список Нулевой указатель JSP на сервлет

У меня возникли трудности с получением значения в раскрывающемся списке из jsp. Я получаю нулевое значение строки, которое является только "". Но если я использую только текстовое поле для отдела, это сработает. Мне трудно найти, где ошибка в моем коде.

Это мой JSP-файл:

 <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
        <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
        <script type="text/javascript" src="js/jquery-ui-1.8.18.custom.min.js"></script>

        </head>
        <body>

            <form method="POST" action='PersonnelController' name="frmAddData" class="form">

                <fieldset>
                    <legend id="myLegend">User</legend>

                    <label for="firstname">First Name :</label>
                            <input type="text" name="firstname"
                                value="<c:out value="${data.firstname}" />" /><br />

                        <label>Last Name :</label>
                            <input type="text" name="lastname"
                                value="<c:out value="${data.lastname}" />" /><br />

                        <!--<label>Department Name :</label>
                            <input type="text" name="department_id" 
                            value="<c:out value="${data.department_id}" />" /><br />-->

                        <label>Department Name :</label>
                <select name="personnel">
                <c:forEach items="${personnels}" var="personnel">
                <option value="${personnel.department_id}"><c:out value="${personnel.department_name}" /></option>
                </c:forEach>
</select>
                </fieldset>
                <input type="submit" value="Submit" class="submit"/>
            </form>

        </body>
        </html>

Это для сервлета:

частный отделДао дд;

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    List<DepartmentBean> personnels = dd.getAllDepartmentName();
    request.setAttribute("personnels", personnels);
    request.getRequestDispatcher("/WEB-INF/personnel.jsp").forward(request, response);
}

}

а это мой DAO:

   public List<DepartmentBean> getAllDepartmentName() {
                List<DepartmentBean> departments = new ArrayList<DepartmentBean>();
                try {
                    Statement statement = connection.createStatement();
                    ResultSet rs = statement.executeQuery("select department_name,id from department ORDER BY department_name");
                    while (rs.next()) {
                        DepartmentBean department = new DepartmentBean();
                        department.setPeople_manager_name(rs.getString("department_name"));
                        departments.add(department);
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }

                return departments;
07.01.2015

  • Я мог бы поискать в Интернете и дать ответ, но я рекомендую вам вообще не использовать <sql:query>. Переместите этот запрос в свой сервлет и предоставьте данные оттуда, а не напрямую из JSP. 07.01.2015
  • Но для этого сценария у вас есть идея, как я могу это исправить? 07.01.2015
  • Да, но не даст такой ответ. Я не буду поддерживать плохой дизайн. 07.01.2015
  • Можете ли вы показать мне пример, в котором ‹sql:query: находится на стороне сервлета, а файл jsp подключен к SQL-запросу сервлета? 07.01.2015
  • Вот пример: stackoverflow.com/questions/5003142/jsp -using-mvc-and-jdbc Ваша ошибка, кстати, простая опечатка. Посмотрите внимательнее на базовую ссылку в ${} значения параметра. 07.01.2015
  • У меня проблема. Я изменил дизайн, но значения/элементы в раскрывающемся списке не отображаются. Я уже отредактировал свой вопрос выше 08.01.2015
  • Отлично, теперь вы следуете лучшему подходу. Теперь проблема в том, что вы не выполняете данные в своей ссылке на объект DepartmentBean в классе dao. Вы заполняете только поле people_manager_name, а в JSP запрашиваете данные для department_id и department_name, которые будут вызывать методы DepartmentBean#getDepartment_id() и DepartmentBean#getDepartment_name(). Посмотрите, как работает язык выражений. 08.01.2015
  • Это уже работает Спасибо! 08.01.2015
  • @ user3496683 всегда пожалуйста. 08.01.2015

Ответы:


1

Проблема в том, что вы не заполняете необходимые поля в ссылке на объект DepartmentBean в классе dao. Вы заполняете только поле people_manager_name, а в JSP запрашиваете данные для department_id и department_name, которые будут вызывать методы DepartmentBean#getDepartment_id() и DepartmentBean#getDepartment_name().

Измените это в методе getAllDepartmentName:

while (rs.next()) {
    DepartmentBean department = new DepartmentBean();
    department.setDepartment_name(rs.getString("department_name"));
    department.setDepartment_id(rs.getInt("department_id"));
    departments.add(department);
}

Вот полезная ссылка о том, как работает язык выражений.

08.01.2015
Новые материалы

Введение в контекст React
В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

Это оно
Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

Базовое руководство по переносу концепций обучения в глубокое обучение
Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

C в C.R.U.D с использованием React-Redux
Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

5 обязательных элементов современного инструмента конвейера данных
В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..