2011-03-16 49 views
0

我在SERVLET創建一個HashMap如下:的Hashmap錯誤:javax.el.PropertyNotFoundException

int productId = Integer.parseInt(request.getParameter("productId")); 

HashMap cartList = new HashMap(); 
Cart item = new Cart(productId, productName, price, quantity); 
cartList.put(productId, item); 

但我得到以下錯誤:

org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: The class 'java.util.HashMap$Entry' does not have the property 'productId'.

是什麼意思?我如何解決我的錯誤?

編輯:這是我的JSP

<c:forEach var="cart" items="${cartList}"> 
     ${cart.productId} 
     ${cart.productName} 
    <form method="POST" action="ShoppingCartUpdate"> 
     <input type="submit" value ="Update" class="loginButton" name="Update"> 
    </form> 
    <form method="POST" action=""ShoppingCartRemove"> 
     <input type="submit" value ="Remove" class="loginButton" name="Delete"> 
    </form> 
</c:forEach> 
+0

可以請你告訴我們JSP代碼 – 2011-03-16 13:04:50

+0

什麼JSP代碼扔的錯誤? – skaffman 2011-03-16 13:05:26

+0

相關:http://stackoverflow.com/questions/924451/jstl-access-a-map-value-by-key – 2011-03-16 13:19:43

回答

3

當迭代中JSTL的Map你迭代其Entry S,所以你需要使用value屬性來訪問它們的值:

<c:forEach var = "e" items = "${cartList}"> 
    ${e.value.productId} 
</c:forEach> 
1

您必須聲明你的HashMap這樣以便它知道什麼鍵/值對的類型是。你應該總是以這種方式實例化HashMap,我不確定它是否會讓你不這樣做。我知道在像Actionscript這樣的東西中,你可以避免定義一個Dictionary,而不需要在其中定義類型,但是在Java中,你必須定義正在使用的類型,並且不能使用原始類型(我相信)如int,雙等

HashMap<Integer, Cart> cartList = new HashMap<Integer, Cart>(); 

和產品ID必須是整數,而不僅僅是詮釋

+0

爲什麼我需要聲明它那樣?我怎麼知道我是否需要申報?謝謝。 – newbie 2011-03-16 13:05:27

+0

我同意聲明部分,但不是關於'int'和'Integer'部分。在這種情況下,Java自動把int整型爲Integer。 – adarshr 2011-03-16 13:06:14

+0

好吧,我很確定我過去曾經抱怨Java沒有將它聲明爲Integer,因爲它不允許原始類型作爲密鑰 – Mike 2011-03-16 13:08:26

1

這是因爲你試圖使用JSP或東西可以讀的方式。

$cartList[productId]應該完成。請注意,productId在這裏是一個整數變量。

相關問題