【问题标题】:Hashmap Error: javax.el.PropertyNotFoundException哈希图错误:javax.el.PropertyNotFoundException
【发布时间】:2011-07-16 14:06:12
【问题描述】:

我在我的 SERVLET 中创建了一个 hashmap,如下所示:

 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: 类“java.util.HashMap$Entry”没有属性“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>

【问题讨论】:

标签: java jsp servlets hashmap propertynotfoundexception


【解决方案1】:

在 JSTL 中迭代 Map 时,您正在迭代其 Entrys,因此您需要使用 value 属性来访问它们的值:

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

【讨论】:

    【解决方案2】:

    这是由于您尝试使用 JSP 或其他方式读取它的方式。

    $cartList[productId] 应该完成。注意productId在这里是一个整数变量。

    【讨论】:

      【解决方案3】:

      您需要声明您的 HashMap 以便它知道键/值对的类型。你应该总是以这种方式实例化 Hashmaps,我不确定它是否会让你即使不这样做。我知道在 Actionscript 之类的东西中,您可以摆脱定义 Dictionary 而不是其中需要包含哪些类型,但在 Java 中,您必须定义正在使用的类型,并且您不能使用原始类型(我相信)这样如 int、double 等

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

      productId 必须是 Integer 而不仅仅是 int

      【讨论】:

      • 为什么我需要这样声明?我怎么知道我是否需要申报?谢谢。
      • 我同意声明部分,但不同意 intInteger 部分。在这种情况下,Java 将 int 自动装箱为 Integer。
      • 好的,我很确定我过去曾抱怨 Java 没有将其声明为 Integer,因为它不允许原始类型作为键
      猜你喜欢
      • 2019-07-22
      • 2017-12-01
      • 2018-01-18
      • 2012-04-15
      • 2013-03-21
      • 1970-01-01
      • 2016-01-20
      • 2015-09-02
      • 2015-06-22
      相关资源
      最近更新 更多