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());
}
}
尝试,提醒每一次迭代中,理想的应该工作。
我没有看到在响应中设置属性的方法。 – user1154644
您无法设置属性作为回应,我的意思是将其设置为测试目的的任何其他范围,如会话等,如果它有效,这意味着您没有转发请求,并且您的页面有新的请求对象。 –
它应该可以工作,但我会这样测试:
1.确定<c:out value="${errors}"/>
确保数据存在于请求中。
2.更改名称error
到例如err1
别的东西,并显示它,以确保不存在任何名称冲突。
3.检查您是否添加了<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
仅供参考:您可以调用request.getRequestDispatcher()。您不需要链接会话和servlet上下文对象(并且您可能不应该)。 –