一尘不染

在JSP内部使用for循环

jsp

我想遍历“节日” 的 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>

阅读 1284

收藏
2020-06-08

共1个答案

一尘不染

造成具体问题的原因是,您将灰心丧气的旧式_脚本_<%%>和其后继EL混合在一起${}。它们不共享相同的变量范围。在allFestivals中不可用 _scriptlet的_范围和i在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攻击孔,请相应地使用<c:out>

当您将servlet用作模型和视图控制器时,请不要忘记 删除
<jsp:useBean>因为在这里它没有任何价值。这只会导致混乱。此外,您还可以通过输入以下内容来禁用 脚本
web.xml以免意外使用它们:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <scripting-invalid>true</scripting-invalid>
    </jsp-property-group>
</jsp-config>
2020-06-08