我在循环得到一个文章的信息,但报以下错错误
严重: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: Cannot create iterator for this collection
at org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:265)
at org.apache.jsp.pet_jsp._jspService(pet_jsp.java:379)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
我在网上收了下,有的说是list中的集合类的字段必须都是String类型,我试过后没用,
有的说是数据库没连接,我测试我连接了的,数据输出无误,
以下是我的代码:请各位高手看看,指出我的错误。并请告诉我是什么原因,在什么情况下会出现这种错误,如何避免。谢谢
----jsp----
<logic:present name="pet">
   <logic:notEmpty name="pet">
   <logic:iterate id="pet" name="pet" type="com.website.struts.entity.Pet">  
   <tr>
   <td>
   <bean:write property="title" name="pet"/>   <%//内容锚点 %>
   </td>
   </tr>
   <tr>
   <td >
   <bean:write property="content" name="pet"/>
   </td>
   </tr>
  
   <tr>
<td>
   <img border="0" src="pet/rline.gif"><img border="0" src="pet/top.gif">
   </td>
   </tr> 
  
   </logic:iterate>
   </logic:notEmpty>
   </logic:present>
---action------
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
int type = Integer.parseInt(request.getParameter("type"));
DateDAO dataDAO = new DateDAO(getDataSource(request,"mysql"));
ArrayList list = (ArrayList)dataDAO.showPet(type);
Pet pet = (Pet)list.get(0);
for(int i=0;i<list.size();i++){
System.out.println(pet.getTitle());
System.out.println(pet.getContent());
}
System.out.println("list.size:"+list.size());
request.setAttribute("pettype", String.valueOf(type));
request.setAttribute("pet", list);
//request.setAttribute("size", list.size());
return mapping.findForward("suc");
}----DAO-----
public Collection showPet(int type){
String sql = "select title,content from petcenter where type = ?";
int i = 0;
try {

if(conn.isClosed()){
throw new IllegalStateException("ERROR.TIME CONNECTION ISCLOSED");
}
ps = conn.prepareStatement(sql);
ps.setInt(1, type);
rs = ps.executeQuery();
while(rs.next() && i<16){
Pet pet = new Pet();
pet.setTitle(rs.getString(1));
pet.setContent(rs.getString(2));
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
list.add(pet);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(conn != null){
try {
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return list;

解决方案 »

  1.   

    ArrayList list = (ArrayList)dataDAO.showPet(type); 可能为 null, 打印一下 list.size()
      

  2.   


    我是Java刚毕业,来看看、学学;希望这个春天不白过
      

  3.   

    给我看看 for(int i=0;i <list.size();i++){
    System.out.println(pet.getTitle());
    System.out.println(pet.getContent());
    }
    System.out.println("list.size:"+list.size()); 的值还有你的
    list.add(pet);  的定义在那里?
      

  4.   


    <logic:present name="pet"> 
       <logic:notEmpty name="pet"> 
       <logic:iterate id="pet" name="pet" type="com.website.struts.entity.Pet">   //换一个id名称就OK,不要都用pet   
    <tr> 
       <td> 
       <bean:write property="title" name="pet"/>    <%//内容锚点 %> 
       </td> 
       </tr> 
       <tr> 
       <td > 
       <bean:write property="content" name="pet"/> 
       </td> 
       </tr> 
       
       <tr> 
    <td> 
       <img border="0" src="pet/rline.gif"> <img border="0" src="pet/top.gif"> 
       </td> 
       </tr>  
       
       </logic:iterate> 
       </logic:notEmpty> 
       </logic:present> 
      

  5.   

    <logic:present name="pet"> 
       <logic:notEmpty name="pet"> 
       <logic:iterate id="pp" name="pet" type="com.website.struts.entity.Pet">  
    <tr> 
       <td> 
       <bean:write property="title" name="pp"/>    <%//内容锚点 %> 
       </td> 
       </tr> 
       <tr> 
       <td > 
       <bean:write property="content" name="pp"/> 
       </td> 
       </tr> 
       
       <tr> 
    <td> 
       <img border="0" src="pet/rline.gif"> <img border="0" src="pet/top.gif"> 
       </td> 
       </tr>  
       
       </logic:iterate> 
       </logic:notEmpty> 
       </logic:present> 
      

  6.   

    Iterate标签使用错误,因该是象楼上说的命名的问题
      

  7.   

    命名我测试了,没问题
    还有数组没错,有记录,在jsp页面能打印出来