在JSP内部使用for循环

Jac*_*ton 28 html java jsp loops for-loop

我想循环遍历"节日" 的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> 
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 58

你的具体问题是由于你把沮丧的和旧学校的小 脚本 <% %>与其继任者EL 混合在一起引起的${}.它们不共享相同的变量范围.它allFestivalsscriptlet作用域中不可用,并且i在EL作用域中不可用.

您应该安装JSTL(< - 单击链接获取指示)并在JSP顶部声明它,如下所示:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
Run Code Online (Sandbox Code Playgroud)

然后按如下方式迭代列表:

<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>
Run Code Online (Sandbox Code Playgroud)

(注意可能的XSS攻击漏洞,相应使用<c:out>)

不要忘记删除<jsp:useBean>,因为它没有绝对的价值在这里,当你使用servlet作为模型和视图控制器.这只会导致混乱.另请参阅我们的servlets维基页面.此外,您可以通过以下条目自行帮助禁用scriptlet,web.xml以便您不会意外地使用它们:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <scripting-invalid>true</scripting-invalid>
    </jsp-property-group>
</jsp-config>
Run Code Online (Sandbox Code Playgroud)

  • 我的大学.说说有点老派教学 (5认同)

Saj*_*ran 16

做这个

    <% for(int i = 0; i < allFestivals.size(); i+=1) { %>
        <tr>      
            <td><%=allFestivals.get(i).getFestivalName()%></td>
        </tr>
    <% } %>
Run Code Online (Sandbox Code Playgroud)

更好的方法是使用c:foreach,查看每个链接jstl