java – 在JSP中使用for循环

我想循环一个“节日”的ArrayList,并通过get方法获取他们的信息,打印出所有的值。由于某些原因,当我使用这个代码,它将始终选择“0”值,而不是递增循环。

如果我将值重写为“get(1)”,它将获得正确的值,所以我的问题显然与语法。

<h1>All Festival Information</h1>
    <jsp:useBean id="allFestivals" type="java.util.ArrayList" scope="session" />
    <table border="1">
        <tr>
            <td>Festival Name:</td>
            <td>Location:</td>
            <td>Start Date:</td>
            <td>End Date:</td>
            <td>URL:</td>
        </tr>
        <% for(int i = 0; i < allFestivals.size(); i+=1) { %>
            <tr>      
                <td>${allFestivals.get(i).getFestivalName()}</td>
                <td>${allFestivals.get(i).getLocation()}</td>
                <td>${allFestivals.get(i).getStartDate()}</td>
                <td>${allFestivals.get(i).getEndDate()}</td>
                <td>${allFestivals.get(i).getURL()}</td>  
            </tr>
        <% } %>
    </table> 
您的具体问题是因为您混合了discouraged and old school小节<%%>与其继任者EL $ {}。它们不共享相同的变量范围。 allFestivals在scriptlet范围中不可用,并且我在EL范围中不可用。

您应该安装JSTL(< - 单击链接以获取说明),并在JSP的顶部声明如下:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

然后在列表中迭代如下:

<c:forEach items="${allFestivals}" var="festival">
    <tr>      
        <td>${festival.festivalName}</td>
        <td>${festival.location}</td>
        <td>${festival.startDate}</td>
        <td>${festival.endDate}</td>
        <td>${festival.URL}</td>  
    </tr>
</c:forEach>

(请注意可能的XSS attack holes,相应地使用< c:out>)

不要忘记删除< jsp:useBean>因为当您使用servlet作为模型和视图控制器时,它没有任何价值。这只会导致混乱。另请参见our servlets wiki page.此外,您还可以通过web.xml中的以下条目来帮助您禁用scriptlet,这样您就不会意外地使用它们:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <scripting-invalid>true</scripting-invalid>
    </jsp-property-group>
</jsp-config>
翻译自:https://stackoverflow.com/questions/15839335/using-for-loop-inside-of-a-jsp

转载注明原文:java – 在JSP中使用for循环