在jsp中使用jstl打印ArrayList

在jsp中使用jstl打印ArrayList,jsp,jstl,Jsp,Jstl,使用Countries类型的ArrayList作为bean类,当使用以下代码时,我只得到一个空白页作为输出: <% ArrayList<Countries> countryList = (ArrayList<Countries>) request.getAttribute("al"); %> <c:forEach items="${countryList}" var="item"> <c:out value="${item.

使用
Countries
类型的
ArrayList
作为bean类,当使用以下代码时,我只得到一个空白页作为输出:

<%
    ArrayList<Countries> countryList = (ArrayList<Countries>) request.getAttribute("al");
%>

<c:forEach items="${countryList}" var="item">
    <c:out value="${item.code}"></c:out>
    <c:out value="${item.name}"></c:out>
</c:forEach>

原因是EL(表达式语言)在任何有效范围内都找不到任何名为countryList的变量。scriptlet中声明的变量对EL不可见,因此必须将其添加到有效范围中,例如请求so:

<%
    ArrayList<Countries> countryList = (ArrayList<Countries>) request.getAttribute("al");
    request.setAttribute("countryList", countryList);
%>

<c:forEach items="${countryList}" var="item">
    <c:out value="${item.code}"></c:out>
    <c:out value="${item.name}"></c:out>
</c:forEach>

您无需再次设置请求属性。您可以使用以下代码

<c:forEach items="${al}" var="item">
    <c:out value="${item.code}"></c:out>
    <c:out value="${item.name}"></c:out>
</c:forEach>

这样,您也可以摆脱scriptlet。


希望有帮助

无需在请求属性中再次设置列表,因为它已经存在于请求范围中。