JSP forEach循环

问题描述:

我有,当发生在我的应用程序的验证错误,我显示JSP。在Servlet中,我在请求中设置了ArrayList<String>错误,并试图在JSP中打印它们,并使用以下代码。我知道ArrayList中有1个错误,因为我将它打印到服务器控制台,但唯一要打印的是“ - ”。我正确使用forEach循环吗?JSP forEach循环

<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

仅供参考:您可以调用request.getRequestDispatcher()。您不需要链接会话和servlet上下文对象(并且您可能不应该)。 –

尝试,提醒每一次迭代中,理想的应该工作。

+0

我没有看到在响应中设置属性的方法。 – user1154644

+0

您无法设置属性作为回应,我的意思是将其设置为测试目的的任何其他范围,如会话等,如果它有效,这意味着您没有转发请求,并且您的页面有新的请求对象。 –

它应该可以工作,但我会这样测试:
1.确定<c:out value="${errors}"/>确保数据存在于请求中。
2.更改名称error到例如err1别的东西,并显示它,以确保不存在任何名称冲突。
3.检查您是否添加了<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>