繁体   English   中英

无法使用JSTL迭代hashmap的arraylist

[英]Not able to iterate arraylist of hashmap with JSTL

我无法使用jstl从哈希图的数组列表中打印或获取数据。 我想显示详细信息,例如bug_id,创建日期,摘要,表中arraylist中存在的每个错误的白板。 以下是jsp和servlet代码。 请提出修复建议。

home.jsp:-

<form action="IncomingBugs">
<table class="ui single line table">
<thead>
<tr>
  <th>Bug Id</th>
  <th>Creation Date</th>
  <th>Summary</th>
  <th>Whiteboard</th>
</tr>
</thead>
<tbody>
  <c:forEach var="row" items="${list}"> 
    <tr>
    <td><c:out value="${row.bug_id}"/></td>
    <td><c:out value="${row.creation_ts}"/></td>
    <td><c:out value="${row.short_desc}"/></td>
    <td><c:out value="${row.status_whiteboard}"/></td>
</tr>
 </c:forEach> 
 </tbody>
 </table>
 </form>

IncomingBugs.jsp:-

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
            OracleConnection oc=new OracleConnection();

    try {
        ArrayList<HashMap<String, Object>> bugList=oc.getbugList(null);

        ArrayList<HashMap<String, String>> blr=new ArrayList<HashMap<String, String>>();
         for (HashMap<String, Object> bugMap : bugList) 
        {
             HashMap<String,String> bl=new HashMap<String, String>();
             String bugzilla_id = bugMap.get("bug_id").toString();
             String creation_ts = bugMap.get("creation_ts").toString();
             String short_desc = bugMap.get("short_desc").toString();
             String status_whiteboard=bugMap.get("status_whiteboard").toString();
             bl.put("bug_id", bugzilla_id);
             bl.put("creation_ts", creation_ts);
             bl.put("short_desc", short_desc);
             bl.put("status_whiteboard", status_whiteboard);
             blr.add(bl);
        }
         request.setAttribute("list",blr);
        RequestDispatcher dispatcher = request.getRequestDispatcher("/home.jsp");
        dispatcher.forward(request, response);

    }

以下是我要在表中打印的Java示例代码:-

ArrayList<HashMap<String, Object>> bugList = (ArrayList<HashMap<String, Object>>)request.getAttribute("list");
 for (HashMap<String, Object> bugMap : bugList) 
{           
     String bugzilla_id = bugMap.get("bug_id").toString();
     String creation_ts = bugMap.get("creation_ts").toString();
     String summary = bugMap.get("summary").toString();
     String status_whiteboard=bugMap.get("status_whiteboard").toString();
     out.println("<tr>");
     out.println("<td>"+bugzilla_id+"</td>");
     out.println("<td>"+creation_ts+"</td>");
     out.println("<td>"+summary+"</td>");
     out.println("<td>"+status_whiteboard+"</td>");
     out.println("</tr>");
} 

这样尝试

<td><c:out value="${row.get('bug_id')}"/></td>
<td><c:out value="${row.get('creation_ts')}"/></td>
<td><c:out value="${row.get('summary')}"/></td>

您有地图列表。 因此,基本上,该行在每次迭代中都包含一个映射。 您可以使用符号row.get('key_name')从映射中获取该键的值。

还要确保将此taglib作为第二行添加在jsp页面的顶部。

<%@ taglib prefix="c"       uri="http://java.sun.com/jsp/jstl/core" %>

通过将IncomingBugs.java的代码移至jsp来解决了该问题,但是我仍然无法弄清为什么arraylist没有从java传递到jsp文件? 我们不能以这种方式从jsp'form action =“ IncomingBugs”'引用servlet吗?

解决方法如下:-

 <%
            OracleConnection oc=new OracleConnection();     
            try {
                ArrayList<HashMap<String, Object>> bugList=oc.getbugList(null);

                ArrayList<HashMap<String, String>> blr=new ArrayList<HashMap<String, String>>();
                 for (HashMap<String, Object> bugMap : bugList) 
                {
                     HashMap<String,String> bl=new HashMap<String, String>();
                     String bugzilla_id = bugMap.get("bug_id").toString();
                     String creation_ts = bugMap.get("creation_ts").toString();
                     String short_desc = bugMap.get("short_desc").toString();
                     String status_whiteboard=bugMap.get("status_whiteboard").toString();
                     bl.put("bug_id", bugzilla_id);
                     bl.put("creation_ts", creation_ts);
                     bl.put("short_desc", short_desc);
                     bl.put("status_whiteboard", status_whiteboard);
                     blr.add(bl);

                }
                 request.setAttribute("list",blr);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
          %>


  <c:forEach items="${list}" var="maps">
  <tr>
  <td>${maps['bug_id']} </td>
  <td>${maps['creation_ts']} </td>
  <td>${maps['short_desc']} </td>
  <td>${maps['status_whiteboard']} </td>
  </tr>
  </c:forEach>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM