【问题标题】:Iterating a List of Hashmap which is also a list of hashmap Using jstl使用 jstl 迭代哈希映射列表,该列表也是哈希映射列表
【发布时间】: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

在上面显示的代码中,如果将&lt;c:out value="${record['ChildName']}"/&gt;更改为&lt;c:out value="${record}"/&gt;
它正在显示内部列表的所有数据,这向我保证迭代没问题,但是我应该如何按键获取内部哈希图的值。任何帮助将不胜感激。

编辑

在上面的代码中

如果我将&lt;c:out value="${record['ChildName']}"/&gt; 更改为&lt;c:out value="${record.key}"/&gt;

它显示所有键

如果我将&lt;c:out value="${record['ChildName']}"/&gt; 更改为&lt;c:out value="${record.value}"/&gt;

它显示所有值

如果我将&lt;c:out value="${record['ChildName']}"/&gt; 更改为

&lt;c:forEach var="entry" items="${record}" &gt;

&lt;c:out value="${entry.key}"/&gt;

&lt;/c:forEach&gt;

它抱怨:

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 &lt;forEach&gt;
    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)

【问题讨论】:

    标签: java jsp foreach


    【解决方案1】:

    我将代码更改为 FROM

    <%@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>
    

    <%@ 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:out value="${objrecord['ChildName']}"/>
    
    </c:forEach>
    
     </c:if>
    
    </c:forEach>
    

    它正在工作。 JSTL 的“Anti-JSP Scriptlets”阵营支持者必须解释一下。 谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 2016-08-04
      相关资源
      最近更新 更多