2013-04-05 24 views
19

內環路我想遍歷「節日」的的ArrayList,並得到他們的信息與得到方法,打印出的所有值。由於某些原因,當我使用這段代碼時,它總會選擇「0」值,而不是遞增循環。使用的JSP

如果我將這些值硬編碼爲「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> 
+1

寫作JSP頁面中的Java代碼。改爲使用JSTL核心標籤''。 – 2013-04-05 16:54:52

+0

只需停止使用'<% %>'。你將自動被迫做正確的事情。另請參見http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files/3180202#3180202 – BalusC 2013-04-05 16:59:27

回答

43

您的具體問題,因爲你是混合discouraged and old school小腳本<% %>其繼任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 attack holes,使用<c:out>相應)

不要忘記刪除<jsp:useBean>,因爲它在這裏沒有絕對的價值,當你使用servlet作爲模型和視圖控制器。這隻會導致混亂。另見our servlets wiki page。而且你會做自己一個忙,在web.xml以下條目來禁用小腳本,這樣你就不會意外地使用它們:不建議

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

完美工作。不知道爲什麼我被告知要使用「<% %>」,因爲大多數在線信息都符合使用「 2013-04-05 17:26:25

+0

不客氣。也許你依靠的是十多年前的資源。 – BalusC 2013-04-05 17:27:53

+5

我的大學。談論有點老學校的教學 – 2013-04-05 18:12:19

14

做這個

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

更好的方法是使用C:的foreach見鏈接jstl for each

+1

在OP的特殊情況下,'allFestivals'在* scriptlet *範圍中不可用。 – BalusC 2013-04-05 17:00:01