我使用Spring 3.0.5和JSP提供模型和视图。
我有一个表单支持对象,让我们调用它&myCommandObject'它有一个地图作为属性 - 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从地图中提取值?
答案 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的类型仍然是它在表达式中被评估的任何东西......直观,我知道。