34

「Festivals」の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> 
4

2 に答える 2

75

推奨されていない古い学校の スクリプトレット <% %>とその後継の EL を混在させているため、具体的な問題が発生します${}。それらは同じ変数スコープを共有しません。はスクリプトレットスコープでは使用できず、allFestivalsはEL スコープでは使用できません。i

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>
于 2013-04-05T17:05:15.840 に答える
18

これを行う

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

より良い方法は c:foreach を使用することです それぞれのリンク jstl を参照してください

于 2013-04-05T16:55:33.367 に答える