как заполнить выпадающий список из базы данных с помощью jstl?

Я знаю, что об этом спрашивали раньше, но это просто не работает для меня.

Я пытаюсь заполнить раскрывающийся список из базы данных с помощью jstl, вот класс, который я использую в качестве usebean:

public class feedData {

    Connection con;

    public feedData() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {

        Class.forName("com.mysql.jdbc.Driver").newInstance();
        String url = "******";

        con = DriverManager.getConnection(url, "**", "**");

    }

    public ArrayList<String> getUnis() throws SQLException {
        ArrayList<String> uniList = new ArrayList<String>();
        String tryquery = "select aff from libra.smalluniqdbtmp";
        Statement stmt2 = con.createStatement();
        ResultSet rs1 = stmt2.executeQuery(tryquery);

        while (rs1.next()) {

            uniList.add(rs1.getString("aff"));

        }

        return uniList;
    }

    public ArrayList<String> getRI() throws SQLException {
        ArrayList<String> RIList = new ArrayList<String>();
        String tryquery = "select interest from libra.riuniqdb";
        Statement stmt2 = con.createStatement();
        ResultSet rs1 = stmt2.executeQuery(tryquery);

        while (rs1.next()) {

            RIList.add(rs1.getString("aff"));

        }

        return RIList;
    }
}

Вот мой JSP:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

        <jsp:useBean id="obj" scope="page" class="uiLibraWeb2Pkg.feedData" />
        <h1>Hello World!</h1>
        <table border="1">
            <thead>
                <tr>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td> <form action="response.jsp">
                            <strong>Select a university:</strong>

                            <select name="affiliation">
                                <c:forEach var="aff" items="${obj.unis}">
                                    <option value="${aff}"></option>
                                </c:forEach>

                            </select>

                        </form>

                    </td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
            </tbody>
        </table>

    </body>
</html>

В журнале сервера и в выходных данных сборки проекта нет сообщений об ошибках, но выпадающий список пуст. Боролся с этим, и я понятия не имею, что не так. Я также попытался установить источник данных и сделать это с помощью jstl, перебирая набор результатов запроса, но это действовало так же.

Теперь я не полагаюсь на какой-либо источник данных, но все равно те же результаты.

Помощь приветствуется, спасибо


person K_U    schedule 16.07.2010    source источник


Ответы (2)


Я не тестировал ваш код, но, пожалуйста, добавьте точку останова на стороне сервера, чтобы проверить, сколько элементов у вас есть в списке. Возможно, он также пуст на стороне сервера.

Второй момент заключается в том, что этот код

<option value="${aff}"></option>

ничего не показывает пользователю, потому что отображается в HTML как опция без текста. Может быть, это должно быть

<option value="${aff}">${aff}</option>
person Guido    schedule 16.07.2010

Щелкните правой кнопкой мыши HTML-страницу в веб-браузере и выберите Просмотр исходного кода. Большой шанс, что вы увидите там теги JSTL без разбора. Правильно, вы не импортировали taglib JSTL поверх JSP в соответствии с документация по основной библиотеке тегов JSTL:

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

(и далее также не забудьте установить метку параметра, как указано @Guido)

Если это не решит проблему, и вы получите ошибки компиляции нераспознанной библиотеки тегов, это означает, что рассматриваемый контейнер сервлетов не поставляется с JSTL, и вам придется установить JSTL самостоятельно. Это в основном просто: просто перетащите jstl-1.2.jar в /WEB-INF/lib вашего веб-приложения и повторно разверните.

Если вы когда-нибудь задавались вопросом, почему это не нужно для тегов JSP, то это потому, что они по умолчанию уже распознаны JspServlet. Любые другие taglibs должны быть явно объявлены как @taglib поверх JSP.


Не имеет отношения к реальной проблеме: ваш код JDBC выглядит неправильно. Вы не закрываете соединения и, следовательно, не теряете ресурсы. Если вы запускаете это несколько раз в течение длительного периода времени, у БД закончатся соединения, и ваше приложение сломается. Вы можете найти эту статью полезной, чтобы научиться правильно используйте код JDBC.

person BalusC    schedule 16.07.2010
comment
Спасибо, taglib, на который вы ссылаетесь, был в коде. Он был удален, когда я удалял некоторые комментарии из кода. Мой плохой, не могу ожидать, что люди помогут, когда я делаю такие ошибки. Спасибо за статью JDBC, я посмотрю. - person K_U; 17.07.2010