【发布时间】:2014-05-17 19:26:49
【问题描述】:
考虑下面的迭代:requestScope.scriptdataset 是类型
List<HashMap<String, List<HashMap<String, Object>>>>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<c:forEach var="objdatatable" items="${requestScope.scriptdataset}">
<c:if test="${not empty objdatatable['vwcmstreevwdata']}">
<c:forEach var="objrecord" items="${objdatatable['vwcmstreevwdata']}">
<c:forEach var="record" items="${objrecord}">
<c:out value="${record['ChildName']}"/>
</c:forEach>
</c:forEach>
</c:if>
</c:forEach>
我想通过 key 获取最里面的 hashmap 的值,但是如下所示失败了。
2014 年 5 月 17 日晚上 8:51:16 org.apache.catalina.core.ApplicationDispatcher 调用 SEVERE: Servlet.service() for servlet jsp 抛出异常 javax.el.PropertyNotFoundException:找不到属性'ChildName' 键入 java.util.HashMap$Entry 在 javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:266) 在 javax.el.BeanELResolver$BeanProperties.access$300(BeanELResolver.java:243) 在 javax.el.BeanELResolver.property(BeanELResolver.java:353) 在 javax.el.BeanELResolver.getValue(BeanELResolver.java:97) 在 org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104) 在 org.apache.el.parser.AstValue.getValue(AstValue.java:183) 在 org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) 在 org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:967) 在 org.apache.jsp.WEB_002dINF.views.menudetails_jsp._jspx_meth_c_005fout_005f0(menudetails_jsp.java:221) 在 org.apache.jsp.WEB_002dINF.views.menudetails_jsp._jspx_meth_c_005fforEach_005f2(menudetails_jsp.java:190) 在 org.apache.jsp.WEB_002dINF.views.menudetails_jsp._jspx_meth_c_005fforEach_005f1(menudetails_jsp.java:150) 在 org.apache.jsp.WEB_002dINF.views.menudetails_jsp._jspx_meth_c_005fforEach_005f0(menudetails_jsp.java:110) 在 org.apache.jsp.WEB_002dINF.views.menudetails_jsp._jspService(menudetails_jsp.java:72) 在 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 在 org.apache.catalina.core.ApplicationFilterChain.internalDo
在上面显示的代码中,如果将<c:out value="${record['ChildName']}"/>更改为<c:out value="${record}"/>
它正在显示内部列表的所有数据,这向我保证迭代没问题,但是我应该如何按键获取内部哈希图的值。任何帮助将不胜感激。
编辑
在上面的代码中
如果我将<c:out value="${record['ChildName']}"/> 更改为<c:out value="${record.key}"/>
它显示所有键
如果我将<c:out value="${record['ChildName']}"/> 更改为<c:out value="${record.value}"/>
它显示所有值
如果我将<c:out value="${record['ChildName']}"/> 更改为
<c:forEach var="entry" items="${record}" >
<c:out value="${entry.key}"/>
</c:forEach>
它抱怨:
May 18, 2014 10:02:16 AM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:312)
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:276)
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:193)
at javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:291)
at org.apache.jsp.WEB_002dINF.views.menudetails_jsp._jspx_meth_c_005fforEach_005f3(menudetails_jsp.java:226)
at org.apache.jsp.WEB_002dINF.views.menudetails_jsp._jspx_meth_c_005fforEach_005f2(menudetails_jsp.java:190)
at org.apache.jsp.WEB_002dINF.views.menudetails_jsp._jspx_meth_c_005fforEach_005f1(menudetails_jsp.java:150)
at org.apache.jsp.WEB_002dINF.views.menudetails_jsp._jspx_meth_c_005fforEach_005f0(menudetails_jsp.java:110)
at org.apache.jsp.WEB_002dINF.views.menudetails_jsp._jspService(menudetails_jsp.java:72)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
【问题讨论】: