我正在尝试将一个posts容器从servlet传递到jsp,以便显示该jsp页面上的所有元素。每个元素都有时间、名称和内容属性。但是jsp文件无法迭代这些元素。我该怎么修?
我的课程是:
public class post {
public post(long time, String name, String content) {
super();
this.time = time;
this.name= name;
this.content= content;
}
public String name;
public String content;
public long time;
}
还有一个servlet,我在其中:
post[] messages;
messages = sortMessages(data); // construct array of post
for (int i = 0; i < messages.length; i++) {
request.setAttribute("posts", messages[i]);
}
在jsp文件中,我希望通过以下方式显示所有帖子:
<c:forEach var="post" items="${posts}">
<div class="post">
<h2>${post.name}</h2>
<p>${post.content}</p>
</div>
但是我得到一个错误:
root cause
javax.servlet.ServletException: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838)
org.apache.jsp.index_jsp._jspService(index_jsp.java:358)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
serv.viewMessages.doGet(viewMessages.java:122)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:274)
org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:238)
org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:155)
javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:256)
org.apache.jsp.index_jsp._jspx_meth_c_005fforEach_005f0(index_jsp.java:411)
org.apache.jsp.index_jsp._jspService(index_jsp.java:318)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
serv.viewMessages.doGet(viewMessages.java:122)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
3条答案
按热度按时间vnzz0bqm1#
这个
items
的属性<c:forEach>
期望集合类型对象能够对其进行迭代。但是在servlet中,您设置了posts
属性的类型post
对象。而不是设置posts
属性为messages[i]
把它调成messages
. 您不需要servlet中的for循环。并使您能够打印
post
对象,您需要提供getters方法。rekjcdws2#
当你在做
request.setAttribute("posts", messages[i]);
在循环中,您只是覆盖上一个值。因此,“post”将只包含for循环中提供的最后一个值。相反,您应该创建一个arraylist并将值保存在arraylist对象中,然后将该对象传递给jsp并在那里使用jstl。通过这种方式发送包含所有值的list对象,现在在jsp中,您可以使用此对象通过for循环获取所有值。
0qx6xfy63#
通过以下方式更改它解决了iteratin问题:
但是,我无法访问其字段并获取错误: