2016-11-26 90 views
1

我一直在試圖解決這個很長一段時間。不知道我哪裏錯了。 我顯示數據庫中的網站列表,其中每個網址都有唯一的ID(我將它們保存爲隱藏字段)。隱藏字段是否始終提交項目列表中的第一個值?

for(int i = 0; i < favoriteList.length; i++) { 

     String url = favoriteList[i].getUrl(); 
     out.println("<tr>"); 
     out.println("<td>"); 

     out.println(" <form id=\"countForm\" method=\"POST\">"); 
     out.println(" <input type=\"hidden\" name=\"favoriteID\" value=\"" 
         + favoriteList[i].getFavoriteId() + "\" />"); 
     out.println("<a" 
      + " href =\" javascript:document.countForm.submit();\"" 
     + " onclick=\"document.getElementById('countForm').submit();\"" + " />" + url + "</a>");  
     out.println("</form>"); 

     out.println("</td> <tr> <td>"); 
     out.println("<p>" + favoriteList[i].getComment() + "</p>"); 
     out.println("</td></tr> <tr><td>"); 
     out.println("<p>" + favoriteList[i].getClickCount() + "</p>"); 
     out.println("</td></tr>"); 
    } 

網站列表顯示正確。但是,在點擊一個URL之後,表單應該被提交併且URL的計數應該增加(基本上,試圖計算點擊次數)。每當我嘗試從String updateAction = request.getParameter("favoriteID");獲取URL的ID(來自隱藏字段)時,第一個鏈接的ID(1)正在被讀取。不知道我是否做對了。

編輯: 我明白,編寫servlet是一個壞主意,但是這是不是JSP或其他替代品的功課,在那裏我必須使用servlet。

+0

請注意,編寫像這樣的servlet對於現實世界中的任何事物都是一個壞主意。相反,使用單獨的模板(如JSP或Thymeleaf),然後提供一個模型(例如,從數據庫中檢索'favoriteList')。 – chrylis

+0

在你的第4條語句之後添加這個'System.out.println(「value:」+ favoriteList [i] .getFavoriteId());'並檢查值是否設置正確。即0,1,2,3 ...如果不是,那麼你可能爲FavoriteId設置了相同的值。 –

+0

@RohitGaikwad,是的,我通過運行for循環測試了這些值。這些ID是唯一的。正如Andreas所說,問題在於所有的表單(對於每個鏈接)都有相同的ID。 –

回答

1

如果您favoriteList有超過一個元素,那麼你正在創建多個<form>元素,所有命名countForm

document.getElementById('countForm')會用這個名字返回第一 形式,所以你總是發佈的第一種形式,不與它鏈接的形式。

單程要解決它,是命名的形式不同,例如,與i值後綴形式名稱:

for(int i = 0; i < favoriteList.length; i++) { 

    String url = favoriteList[i].getUrl(); 
    out.println("<tr>"); 
    out.println("<td>"); 

    out.println(" <form id=\"countForm" + i + "\" method=\"POST\">"); 
    out.println(" <input type=\"hidden\" name=\"favoriteID\" value=\"" 
        + favoriteList[i].getFavoriteId() + "\" />"); 
    out.println("<a" 
     + " href =\" javascript:document.countForm" + i + ".submit();\"" 
    + " onclick=\"document.getElementById('countForm" + i + "').submit();\"" + " />" + url + "</a>");  
    out.println("</form>"); 

    out.println("</td> <tr> <td>"); 
    out.println("<p>" + favoriteList[i].getComment() + "</p>"); 
    out.println("</td></tr> <tr><td>"); 
    out.println("<p>" + favoriteList[i].getClickCount() + "</p>"); 
    out.println("</td></tr>"); 
} 

注:你得到的第一種形式事實上是依賴於瀏覽器。 DOM spec說:

返回元素,它的id由elementId給出。如果不存在這樣的元素,則返回null。行爲是未定義如果不止一個元素有這個id

+0

問題與您提到的觀點完全相同 - 表單ID並非唯一,因此第一個表單正在提交。 通過爲每個表單設置唯一的ID來修復它。非常感謝您準確指出錯誤。 –

相關問題