web-dev-qa-db-fra.com

Utilisation de la boucle for dans un fichier JSP

Je veux parcourir une ArrayList de "Festivals" et obtenir leurs informations avec les méthodes obtenir, en affichant toutes ses valeurs. Pour une raison quelconque, lorsque j'utilise ce code, il choisira toujours la valeur "0" et ne incrémentera pas la boucle.

Si je code en dur les valeurs en tant que "get (1)", il obtiendra les valeurs correctes, ainsi mon problème concerne clairement la syntaxe.

<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> 
26
Jack Dalton

Votre problème concret est dû au fait que vous mélangez découragé et vieille école scriptlets<% %> _ avec son successeur EL ${}. Ils ne partagent pas la même portée variable. Le allFestivals n'est pas disponible dans scriptlet et le i n'est pas disponible dans le champ EL.

Vous devez installer JSTL (<- cliquez sur le lien pour obtenir des instructions) et déclarez-le en haut de JSP comme suit:

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

puis parcourez la liste comme suit:

<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>

(Méfiez-vous des possibles trous d’attaque XSS , utilisez <c:out> en conséquence)

N'oubliez pas de supprimer le <jsp:useBean> car il n’a aucune valeur absolue ici lorsque vous utilisez un servlet en tant que contrôleur de modèle et affichage. Cela ne ferait que semer la confusion. Voir aussi page wiki de nos servlets . De plus, vous voudriez désactiver scriptlets en saisissant l'entrée suivante dans web.xml afin que vous ne les utilisiez pas accidentellement:

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

Faire ceci

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

Le meilleur moyen est d’utiliser c: foreach voir lien jstl pour chacun

16
Sajan Chandran