我有我的控制器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")
答案 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为LinkedHashMap
或TreeMap
,否则迭代顺序未指定。示例:
<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>