2013-08-03 3 views
0

У меня есть JSP, который отображается при ошибках проверки в моем приложении. В Servlet я установил ArrayList<String> ошибок в запросе и пытаюсь распечатать их в JSP со следующим кодом. Я знаю, что есть 1 ошибка в ArrayList, потому что я печатаю ее на консоль сервера, но единственное, что печатается, это «-». Я правильно использую цикл forEach?JSP forEach loop

<c:forEach var="error" items="${errors}"> 
    <h1>-${error}</h1> 
    <br> 
</c:forEach> 

Вот часть кода из doPost в Servlet:

 ArrayList<String> errors = dataValidator.getErrors(); 
    if (errors.isEmpty()) { 
     String cost = dataValidator.getCost(); 
     request.setAttribute("cost", cost); 
     RequestDispatcher resultsDispatcher = request.getSession().getServletContext().getRequestDispatcher("/results.jsp"); 
     try { 
      resultsDispatcher.forward(request, response); 
     } catch (ServletException se) { 
      System.out.println("Servlet Exception: " + se.toString()); 
     } catch (IOException ioe) { 
      System.out.println("IO Exception: " + ioe.toString()); 
     } 
    } else { 
     request.setAttribute("errors", errors); 
     RequestDispatcher errorDispatcher = request.getSession().getServletContext().getRequestDispatcher("/errors.jsp"); 
     try { 
      errorDispatcher.forward(request, response); 
     } catch (ServletException se) { 
      System.out.println("Servlet Exception: " + se.toString()); 
     } catch (IOException ioe) { 
      System.out.println("IO Exception: " + ioe.toString()); 
     } 
    } 
+0

FYI: Вы можете просто вызвать 'request.getRequestDispatcher()'. Вам не нужно связываться с объектами контекста сеанса и сервлета (и вы, вероятно, не должны в любом случае). –

ответ

-1

Try для предупреждения на каждой итерации, в идеале он должен работать.

+0

Я не вижу способа установить атрибут в ответе. – user1154644

+0

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

0

Он должен работать, но я бы протестировал его так:
1. Do <c:out value="${errors}"/>, чтобы убедиться, что данные в запросе.
2. Измените имя error на что-нибудь еще, например err1 и отобразите его, чтобы убедиться, что конфликтов имен нет.
3. Убедитесь, что вы добавили <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>