无法使用jstl迭代hashmap的arraylist

uyhoqukh  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(450)

我无法使用jstl打印或从hashmap的arraylist获取数据。我想在表格的arraylist中显示每个bug的详细信息,比如bug的id、创建日期、摘要、白板。下面是jsp和servlet代码。请建议修理。
家。jsp:-

  1. <form action="IncomingBugs">
  2. <table class="ui single line table">
  3. <thead>
  4. <tr>
  5. <th>Bug Id</th>
  6. <th>Creation Date</th>
  7. <th>Summary</th>
  8. <th>Whiteboard</th>
  9. </tr>
  10. </thead>
  11. <tbody>
  12. <c:forEach var="row" items="${list}">
  13. <tr>
  14. <td><c:out value="${row.bug_id}"/></td>
  15. <td><c:out value="${row.creation_ts}"/></td>
  16. <td><c:out value="${row.short_desc}"/></td>
  17. <td><c:out value="${row.status_whiteboard}"/></td>
  18. </tr>
  19. </c:forEach>
  20. </tbody>
  21. </table>
  22. </form>

虫子。jsp:-

  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2. // TODO Auto-generated method stub
  3. OracleConnection oc=new OracleConnection();
  4. try {
  5. ArrayList<HashMap<String, Object>> bugList=oc.getbugList(null);
  6. ArrayList<HashMap<String, String>> blr=new ArrayList<HashMap<String, String>>();
  7. for (HashMap<String, Object> bugMap : bugList)
  8. {
  9. HashMap<String,String> bl=new HashMap<String, String>();
  10. String bugzilla_id = bugMap.get("bug_id").toString();
  11. String creation_ts = bugMap.get("creation_ts").toString();
  12. String short_desc = bugMap.get("short_desc").toString();
  13. String status_whiteboard=bugMap.get("status_whiteboard").toString();
  14. bl.put("bug_id", bugzilla_id);
  15. bl.put("creation_ts", creation_ts);
  16. bl.put("short_desc", short_desc);
  17. bl.put("status_whiteboard", status_whiteboard);
  18. blr.add(bl);
  19. }
  20. request.setAttribute("list",blr);
  21. RequestDispatcher dispatcher = request.getRequestDispatcher("/home.jsp");
  22. dispatcher.forward(request, response);
  23. }

下面是我想要打印的java示例代码table:-

  1. ArrayList<HashMap<String, Object>> bugList = (ArrayList<HashMap<String, Object>>)request.getAttribute("list");
  2. for (HashMap<String, Object> bugMap : bugList)
  3. {
  4. String bugzilla_id = bugMap.get("bug_id").toString();
  5. String creation_ts = bugMap.get("creation_ts").toString();
  6. String summary = bugMap.get("summary").toString();
  7. String status_whiteboard=bugMap.get("status_whiteboard").toString();
  8. out.println("<tr>");
  9. out.println("<td>"+bugzilla_id+"</td>");
  10. out.println("<td>"+creation_ts+"</td>");
  11. out.println("<td>"+summary+"</td>");
  12. out.println("<td>"+status_whiteboard+"</td>");
  13. out.println("</tr>");
  14. }
7vhp5slm

7vhp5slm1#

通过将incomingbugs.java的代码移到jsp中解决了这个问题,但是我仍然无法理解为什么arraylist没有从java传递到jsp文件?我们不能这样从jsp'form action=“incomingbugs”'引用servlet吗?
下面是fix:-

  1. <%
  2. OracleConnection oc=new OracleConnection();
  3. try {
  4. ArrayList<HashMap<String, Object>> bugList=oc.getbugList(null);
  5. ArrayList<HashMap<String, String>> blr=new ArrayList<HashMap<String, String>>();
  6. for (HashMap<String, Object> bugMap : bugList)
  7. {
  8. HashMap<String,String> bl=new HashMap<String, String>();
  9. String bugzilla_id = bugMap.get("bug_id").toString();
  10. String creation_ts = bugMap.get("creation_ts").toString();
  11. String short_desc = bugMap.get("short_desc").toString();
  12. String status_whiteboard=bugMap.get("status_whiteboard").toString();
  13. bl.put("bug_id", bugzilla_id);
  14. bl.put("creation_ts", creation_ts);
  15. bl.put("short_desc", short_desc);
  16. bl.put("status_whiteboard", status_whiteboard);
  17. blr.add(bl);
  18. }
  19. request.setAttribute("list",blr);
  20. } catch (Exception e) {
  21. // TODO Auto-generated catch block
  22. e.printStackTrace();
  23. }
  24. %>
  25. <c:forEach items="${list}" var="maps">
  26. <tr>
  27. <td>${maps['bug_id']} </td>
  28. <td>${maps['creation_ts']} </td>
  29. <td>${maps['short_desc']} </td>
  30. <td>${maps['status_whiteboard']} </td>
  31. </tr>
  32. </c:forEach>
展开查看全部
b4qexyjb

b4qexyjb2#

像这样试试

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

你有Map列表。所以本质上,行在每次迭代中保存一个Map。你可以用这个符号 row.get('key_name') 从Map上获取该键的值。
还要确保这个taglib作为第二行添加到jsp页面的顶部。

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

相关问题