【问题标题】:Accessing the contents of Map<Long, Map<String, Object>> in jsp using key value使用键值在jsp中访问Map<Long, Map<String, Object>>的内容
【发布时间】:2011-09-21 21:21:15
【问题描述】:

我有一个接收这种类型的 HashMap 对象的 jsp 页面: Map&lt;Long, Map&lt;String, Object&gt;&gt;.

此地图的一个示例是:
foo = {1 = {id=1, response="someText"}, 2={id=99, response="random"}};

我正在尝试像这样迭代 foo 中两个地图的内容:

<c:forEach items="${fooMap.content}" var="outerMap">
    <c:forEach items="${outerMap.value}" var = "innerMap">
        <p>${innerMap.response}</p>
    </c:foreach>
</c:forEach>

但这会抛出“在 java.util.HashMap 类型上找不到属性'响应'..... 有人可以告诉我我做错了什么吗?

我知道我可以使用 Map.EntrySet 访问 innerMap 的内容。但我想使用特定的键访问该值。

【问题讨论】:

    标签: java jsp jstl el


    【解决方案1】:

    ${outerMap.value} 返回一个Map&lt;String, Object&gt;,其中一个条目以“响应”作为键。因此,您需要直接从那里获取它,而不是在 ${innerMap} 中迭代其入口集。

    <c:forEach items="${fooMap.content}" var="outerMap">
        <p>${outerMap.value.response}</p>
    </c:forEach>
    

    一个(更笨拙的)替代方法是检查${innerMap} 输入键:

    <c:forEach items="${fooMap.content}" var="outerMap">
        <c:forEach items="${outerMap.value}" var="innerMap">
            <c:if test="${innerMap.key == 'response'}">
                <p>${innerMap.value}</p>
            </c:if>
        </c:foreach>
    </c:forEach>
    

    你现在还能把头绕过去吗? :)

    【讨论】:

    • 非常感谢。那只是钉了它。你介意告诉我为什么我的方法是错误的吗?我想因为 foo 是地图的地图。我会迭代两次并访问键和值。
    • ${outerMap} 是一个Map.Entry,其值为内部映射。要按键获取值,您需要内部映射的句柄。但是您试图在内部映射的Map.Entry 上按键获取一个值,它确实没有getResponse() 方法。它只有getKey() 和getValue() 方法。
    • 感谢您的解释和回答。只要允许我这样做,我就会接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 2021-04-29
    • 1970-01-01
    • 2018-09-22
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多