将 HashMap 传递给 jsp

Passing HashMap to jsp

我正在尝试使用此 JSP 代码显示元素列表:

                 <c:forEach items="${themesContentMap}" var="entry">
                    <tr>
                    <td><input  type="checkbox" value="${entry.key.getId()}"checked></td>
                    <td>${entry.key.getLibelle()}</td>
                    <td>${entry.value.getNom()}</td>
                    </tr>
                    </c:forEach>

由 java 代码提供:

    HashMap<ThemeBean, CoursBean> themeContentMap = new HashMap<ThemeBean, CoursBean>();
    for (ThemeBean theme : themeBeans) {
        themeContentMap.put(theme, coursDAO.getCours(theme.getCours()));
    }
    LOG.debug("Found matching: " + themeContentMap);
    request.setAttribute("themesContentMap", themeContentMap);
    resp.sendRedirect(LIST_THEMES);

但是我的网页中没有任何内容,日志中也没有任何错误(调试显示正确的信息)。

请注意,我是 servlet 和 JSP 的初学者,所以我可能遗漏了一些明显的东西。

  resp.sendRedirect(LIST_THEMES);

创建一个新请求,因此,先前的请求属性将丢失。 你必须在这里使用 RequestDispatcher

RequestDispatcher view = request.getRequestDispatcher("yourJspName");
view.forward(request, response);

通过这种方式,您将能够在 jsp 中访问您的请求属性。 您需要了解 difference between a request dispatcher and redirect

这是 请求调度程序 的工作方式:

这就是 response.sendRedirect() 的工作原理

This tutorial will help

sendRedirect() 将 header 发送回浏览器(302 HTTP 状态代码), 并且还包含要重定向到的资源的名称。所以这将是浏览器对资源的新请求。 您必须转发请求

requestDispatcher.forward(request, response);

Jsp 接受请求和那里的属性并进一步处理它。