将HashMap分配给JSP中的变量

时间:2014-10-04 13:24:18

标签: java jsp servlets

我有我的控制器Servlet创建一个对象并将其放入HashMap中我将其作为属性转发给我的JSP,在我的JSP中我希望将此HashMap设置为变量,我怎么能这样做?

见下面的代码:

ControllerServlet中

Map<Integer, Post> posts = new HashMap<Integer, Post>();

// Needs refactoring to a DB query
Post p = new Post();
p.setId(1);
p.setTitle("Hello World!");
p.setBody("This is my first blog post!");
p.setAuthor("Jacob Clark");
p.setPublished(new Date());

posts.put(p.getId(), p);

getServletContext().setAttribute("posts", posts);

RequestDispatcher rd = getServletContext().getRequestDispatcher("/WEB-INF/index.jsp");
rd.forward(request, response);

JSP

getServletContext().getAttribute("posts")

1 个答案:

答案 0 :(得分:1)

请不要使用ServletContext在servlet和JSP页面之间进行通信!您最好对该用法使用请求属性,ServletContext属性对所有servlet和所有会话都是通用的。

在您的控制器中使用:

request.setAttribute("posts", posts);

RequestDispatcher rd = getServletContext().getRequestDispatcher("/WEB-INF/index.jsp");
rd.forward(request, response);

然后在JSP中:

<jsp:useBean name="posts" scope="request" class="java.util.Map"/>
${posts["1"].title}

您可以使用<c:foreach> JSTL标记迭代地图,但除非Map in为LinkedHashMapTreeMap,否则迭代顺序未指定。示例:

<table><tr><th>Title</th><th>Author</th><tr>
<c:forEach var="entry" items="${posts}">
   <!-- Key is ${entry.key} Value is ${entry.value} -->
   <tr><td>${entry.value.title}</td><td>${entry.value.author}</td></tr>
</c:forEach>
</table>