不幸的是,這是一個學校專案,大多數變數都是我的母語,如果需要,我會翻譯任何內容,但保留代碼原樣,以防萬一出現問題。
我正在為餐飲服務制作一個 Web 應用程式,我的后端使用 Java servlet,前端使用 JSP。
該會話存盤一個 Order 物件,該物件具有 HashMap<Product, Quantity>。在我的購物車 jsp foreach 產品中,哈希圖中的 css 網格中有一行顯示在螢屏上。
<!-- Cart jsp snippet-->
<!--article Order.getHashMap().keySet()-->
<c:forEach var="stavka" items="${Narudzbina.getStavkeNarudzbine().keySet()}">
<div class='korpa-stavka'>
<!-- article.getName() -->
<h5>${stavka.getNazivProizvoda()}</h5>
<input class="btn btn-light poeni-korpa" type="number" min="1" id="${stavka.getProizvodID()}" onchange="updateUrl(this)" value="${Narudzbina.getStavkeNarudzbine().get(stavka)}">
<div class="stavka-buttons">
<!-- Link is filled with a js script -->
<a href="" id="a${stavka.getProizvodID()}" class="btn btn-warning btn-stavka">Izmeni</a>
<!-- Link is static except for the ID, but no JS -->
<a href="Korpa?Zahtev=Izbrisi&Proizvod=${stavka.getProizvodID()}" class="btn btn-danger btn-stavka">Izbri?i</a>
</div>
</div>
<p class='stavka-total'>Cena: ${stavka.getCenaPoPorciji() * Narudzbina.getStavkeNarudzbine().get(stavka)} RSD</p>
</c:forEach>
這按預期作業。其中一個a標簽href值填充了來自之前輸入的數字的 onchange 呼叫。
// Js for updating href of that a tag
function updateUrl(element){
var link = document.getElementById("a" element.id);
link.setAttribute("href", "Korpa?Zahtev=Izmeni&Proizvod=" element.id "&Kolicina=" element.value);
}
對于哈希表中每個自動生成的行,這也很有效。a據我所見,單擊其中任何一個上的按鈕,正確呼叫“Korpa”控制器,具有良好的引數、不同且正確的 ArticleID、不同且正確的數量。
然后,Korpa servlet 將會話 Order 物件打包到臨時 Order 中,在其上呼叫 changeQuantity(article, newQuantity) ,完成后將更改的 Order 打包到會話中并重新加載購物車頁面。
// Order order = session order
Narudzbina narudzbina = (Narudzbina)session.getAttribute("Narudzbina");
//order.change quantity
narudzbina.izmeniKolicinu(Integer.valueOf(request.getParameter("Proizvod")), Integer.valueOf(request.getParameter("Kolicina")));
session.setAttribute("Narudzbina",narudzbina);
//refreshes the Cart jsp
response.sendRedirect("Profil?User=" session.getAttribute("User").toString() "&View=Korpa");
return;
訂單模型只是改變了哈希圖中的值
//changeQuantity article ID newQuantity
public void izmeniKolicinu(int proizvodID, int novaKolicina) {
//Order ord : hashMap.keySet()
for (Proizvod prod : stavkeNarudzbine.keySet()) {
//if ord.getArticleID == articleID
if (prod.getProizvodID() == proizvodID) {
stavkeNarudzbine.put(prod, novaKolicina);
}
break;
}
}
現在所有這些對于更改數量和洗掉文章都非常有效(洗掉幾乎相同,并且控制器中有一個 switch 陳述句來檢查要運行的內容,我忽略了這一點,因為這已經是一個很長的帖子,而且很可能無關緊要)
但僅適用于購物車 jsp 螢屏上繪制的第一篇文章。其他文章正確更新了各自href的,并且都正確呼叫了 servlet,頁面重繪 ,沒有拋出例外,并且第一個(有效)和其余的請求的狀態都是 302。但值不會更新。
單擊除第一個生成的鏈接之外的任何鏈接都不會更新值
此外,如果我在第一個實際作業的專案上單擊“洗掉”,它就會被洗掉,新的第一個繪制的專案現在可以作業。抱歉這個漫無邊際的問題,我只是一個學生,真的迷失在這個問題上,不太確定問題可能是什么所以我提供了所有我認為會有所幫助的資訊...... PS沒有與在這個程序中的任何地方的資料庫。
編輯:澄清問題
uj5u.com熱心網友回復:
在這里有一個正確的答案(OP通過評論找到它):break需要在if條件內
if (prod.getProizvodID() == proizvodID) {
stavkeNarudzbine.put(prod, novaKolicina);
break; // HERE
}
// NOT HERE: break;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/504204.html
上一篇:Jsp無法獲取會話屬性值
