使用 Hashmap 数据填充 JSP 表时继续获取 PropertyNotFoundException [重复]

Posted

技术标签:

【中文标题】使用 Hashmap 数据填充 JSP 表时继续获取 PropertyNotFoundException [重复]【英文标题】:Keep Getting PropertyNotFoundException when populating a JSP table with Hashmap Data [duplicate] 【发布时间】:2017-01-25 03:59:31 【问题描述】:

我正在尝试使用 HashMap 的内容填充 JSP 表,但在第一次尝试在 JSP(firstName 属性)中引用它时,我不断收到 PropertyNotFoundExceptions。我尝试使用 var['key'] 和 var.value.key 在 EL 中引用它的方式,每次我得到一个 PropertyNotFoundException。这是我正在使用的代码:

JSP:

<c:forEach var="orders" items="$ orderList ">
            <tr>
                <td class="name">
                    <a href="">$ orders.firstName </a>
                </td>
                <td>$ orders.date </td>
                <td>$ orders.product </td>
                <td>$ orders.comments </td>
            </tr>
        </c:forEach>

设置属性的Servlet:

FormManager fm = new FormManager();
HashMap hm = fm.getOrder();
request.setAttribute("orderList", hm);

来自 FormManager 类:

public HashMap getOrder() 
        dbm = new DatabaseManager();
        Statement stmt = null;
        String sql = "SELECT * FROM orders";
        HashMap<String, String> itemMap = new HashMap<String, String>();
        String[] keys =  "firstName", "lastName", "phone", "email" , "date", "product", "comments", "id" ;

        dbm.setUrl("jdbc:mysql://localhost:3306/pattycakes");
        dbm.connect();
        try 
            stmt = dbm.getConn().createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            ResultSetMetaData rsmd = rs.getMetaData();

            int columns = rsmd.getColumnCount();
            for (int i = 0; i < columns; i++) 
                rs.beforeFirst();
                rs.next();
                itemMap.put(keys[i], rs.getString(i + 1));
            
         catch (SQLException e) 
            e.printStackTrace();
         finally 
            dbm.disconnect(stmt, dbm.getConn());
        
        return itemMap;
    

到目前为止,该代码可能存在一些问题,因为我仍在为家庭成员编写此代码。我所关心的是如何克服异常。谢谢!

【问题讨论】:

【参考方案1】:

JSP 似乎假定orderList 属性将是映射的Collection,但您提供的其他代码显示它被设置为具有String 键和String 值的单个映射,表示单个订单。由于orderListMap,因此通过JSTL foreach 对其进行迭代会产生Map.Entry 的实例,对应于映射中的每个条目。这些条目确实没有firstName 属性,也没有您尝试提取的任何其他属性。

由于命名不当的orderList 属性实际上只为一个订单提供数据,因此您对它的迭代没有意义。我倾向于认为您为该属性设置了错误的值,但如果它确实是您想要的,那么您可能会按照以下几行使用 JSP 代码显示一个订单:

<!-- no foreach -->
<tr>
    <td class="name">
        <a href="">$ orderList["firstName"] </a>
    </td>
    <td>$ orderList["date"] </td>
    <td>$ orderList["product"] </td>
    <td>$ orderList["comments"] </td>
</tr>

【讨论】:

感谢您的帮助,我知道我的代码中存在不一致之处,但没有看到。它是地图的集合和订单表。我犯了大错。

以上是关于使用 Hashmap 数据填充 JSP 表时继续获取 PropertyNotFoundException [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Range 类的自动填充方法在填充表时失败

将第一个节点添加到hashmap中的链表时,为啥必须将新节点直接分配给索引指针?

使用数据库信息填充 JSP 下拉列表

使用Hash表时,针对Hash冲突的几个常见解决办法

使用Hash表时,针对Hash冲突的几个常见解决办法

使用来自 JavaBean 的数据填充 JSP 页面中的复选框