передать ResultSet из сервлета в JSP - PullRequest
3 голосов
/ 13 ноября 2009

Я делаю следующее в моем SampleServlet.java

//Fill resultset from db
....
try {
   ArrayList Rows = new ArrayList();

   while (resultSet.next()){
       ArrayList row = new ArrayList();
       for (int i = 1; i <= 7 ; i++){
           row.add(resultSet.getString(i));
       }
       Rows.add(row);
   }

request.setAttribute("propertyList", Rows);
RequestDispatcher requestDispatcher = getServletContext().getRequestDispatcher("/DisplayProperties.jsp");
requestDispatcher.forward(request,response);

и затем в моем jsp DisplayPropeties.jsp у меня есть

<% 
     ArrayList rows = new ArrayList();

     if (request.getSession().getAttribute("propertyList") != null) {
         rows = (ArrayList ) request.getSession().getAttribute("propertyList");
     }
%>

но rows всегда равно нулю.

Что я делаю не так?

Ответы [ 4 ]

7 голосов
/ 13 ноября 2009

Вы также не должны использовать ResultSet в JSP. Это курсор базы данных, дефицитный ресурс. Вы можете заставить это «работать» на простой странице, но держу пари, что вы не несете четкой ответственности за закрытие ResultSet, Statement или Connection в своем коде. Вы скоро закончите и будете удивляться, почему ваш код падает с исключениями.

Ни одна из реализаций интерфейса java.sql не должна выходить за пределы четко определенного уровня персистентности. Получите соединение, получите ResultSet, сопоставьте его с объектом или структурой данных и закройте все свои ресурсы в обратном порядке получения, затем верните объект или структуру данных в свой JSP, написанный только для JSTL и без скриптов, для отображения. Это правильная вещь.

Если вы ДОЛЖНЫ использовать SQL в JSP, используйте для этого теги JSTL .

5 голосов
/ 13 ноября 2009

Я не понимаю, как строки могут быть null с учетом вашего if заявления.

Во всяком случае, не должно ли быть request.getAttribute("propertyList") в DisplayProperties.jsp?

3 голосов
/ 12 июля 2011

Используйте

request.getSession().setAttribute("propertyList", Rows);

вместо

request.setAttribute("propertyList", Rows);

в вашем коде сервлета. Будет отлично работать.

3 голосов
/ 13 ноября 2009

У вас есть ответ, поэтому я собираюсь сделать только предложение по улучшению: не использовать скриптлеты в JSP Используйте taglibs и EL, где это уместно. Примером для создания списка будет:

<ul>
    <c:forEach items="${propertyList}" var="item">
        <li>${item}</li>
    </c:forEach>
</ul>

Вы можете сделать то же самое для HTML table с и раскрывающегося списка option с. Надеюсь, это поможет.

...