如何从.jsp中的地图<string,string =“”>获取值 - 我可以打印整个地图,但不能从中提取单个值

时间:2016-07-13 20:05:04

标签: java spring jsp

我使用Spring 3.0.5和JSP提供模型和视图。

我有一个表单支持对象,让我们调用它&myCommandObject&#39;它有一个地图作为属性 - tempMap。

当我为模型和视图提供服务时,如果我调试我的java,我可以看到模型中的地图已准备就绪:

LinkedHashMap<K,V> | tempMap | {432345=Other - please comment, 123534=first option, 21331=second option, 234634=third option, 234444=Please Select One}

在我的JSP中,我可以通过执行以下操作从模型中显示整个地图:

    <c:out value="MARK"></c:out>
    <c:out value="${myCommandObject.tempMap}"></c:out>
    <c:out value="MARK"></c:out>

当视图在我的浏览器中呈现为HTML时,我看到:

MARK 432345=Other - please comment, 123534=first option, 21331=second option, 234634=third option, 234444=Please Select One MARK 

我还可以获取并显示上面显示的其中一个键值,如:

        <c:out value="${otherObj.uid}"></c:out>

我看到显示的值如下:

 123534

(虽然这会动态变化 - 因此我无法对该值进行硬编码)

然而,无论如何我试图从我的地图中提取单个值 - 我只得到空白和错误消息。

如何使用JSP在此地图中显示单个值?

我尝试过的事情:

<c:out value="${tempMap[otherObj.uid]}"></c:out>


 <c:out value="${tempMap[${otherObj.uid]} }"></c:out>


<c:out value="${myCommandObject.tempMap}"></c:out>


<c:out value="${myCommandObject.tempMap['otherObj.uid']}"></c:out>


<c:out value="${myCommandObject.tempMap['otherObj.uid']}"></c:out>


<c:set var="varName" value="${otherObj.uid}"/>
<c:out value="${myCommandObject.tempMap[varName]}"></c:out>


<c:out value="${myCommandObject.tempMap(otherObj.uid)}"></c:out>

所有这些只会导致空白输出 - 除了抛出EL异常的最后一个。

我做错了什么?如何使用JSP从地图中提取值?

1 个答案:

答案 0 :(得分:0)

啊,我明白了。

正如评论员指出的那样 - 问题是类型转换之一。

我在Map上使用Long类型键,并且使用此语法不会发生隐式类型转换。

想到我在我的几个例子中尝试显式类型转换,使用this堆栈溢出问题中的技巧...但是我误读了这个例子并且做错了。

这是错的:

<c:set var="varName" value="${otherObj.uid}"/>
<c:out value="${myCommandObject.tempMap[varName]}"></c:out>

这是有用的:

<c:set var="varName">${otherObj.uid}</c:set>
<c:out value="${myCommandObject.tempMap[varName]}"></c:out>

<&lt;&lt;&lt;&lt;&lt;&lt;&gt; c:设置&gt; tag总是被解释为一个字符串并被赋值给变量 - 但是如果你给它一个'value'属性,那么var的类型仍然是它在表达式中被评估的任何东西......直观,我知道。