Подтвердить что ты не робот

Использование для цикла внутри JSP

Я хочу перебрать ArrayList из "Festivals" и получить информацию с методами 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> 
4b9b3361

Ответ 1

Конкретная проблема возникает из-за того, что вы смешиваете обескураженную и старую школу сценарии <% %> со своим преемником EL ${}. Они не разделяют одну и ту же переменную область. allFestivals недоступен в области сценария, а 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> соответственно)

Не забудьте удалить <jsp:useBean>, поскольку он не имеет никакого значения здесь, когда вы используете сервлет как контроллер модели и представления. Это приведет лишь к путанице. См. Также нашу страницу wiki сервлетов. Далее вы сделаете одолжение, чтобы отключить скрипты из следующей записи в web.xml, чтобы вы случайно не использовали их:

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

Ответ 2

Сделайте это

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

Лучше всего использовать c: foreach см. ссылку jstl для каждого