现有表uload,内有name,pwd.想查询出里面的内容并叠代显示.当程序一运行的时候index直接跳转到action类.
错误提示无法为这个集合创建iterate标签.
严重: Servlet.service() for servlet debugjsp threw exception
javax.servlet.jsp.JspException: Cannot create iterator for this collection
at org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:267)
at org.apache.jsp.showMsg_jsp._jspService(org.apache.jsp.showMsg_jsp:81)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)代码如下:连接数据库类:
package DBManage;
import java.sql.*;
/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2008</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class Dao {
    public Dao() {
    }
    private Connection conn;
     private Statement stmt;
     private ResultSet rs;
   public Connection myConnection() {
       try {
           Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
           conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databaseName=mytest;","sa","sa");       } catch (Exception ex) {
           ex.printStackTrace(); //以下省略不写
       }
       return conn;
   }   public Statement myStatement() {       try {
           conn=this.myConnection();
           stmt = conn.createStatement();
       } catch (SQLException ex) {
       }
       return stmt;
   }   public ResultSet myResultSet(String sql) {
       try {
           stmt=this.myStatement();
            rs = stmt.executeQuery(sql);
       } catch (SQLException ex) {
       }
       return rs;
   }   public void closeAll() {
       try {
           if (stmt != null) {
               stmt.close();
           }
           if (rs != null) {
               rs.close();
           }
           if (conn != null) {
               conn.close();
           }
       } catch (SQLException ex) {       }
   }
}action类
package search;import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
import java.util.*;
import DBManage.*;
import java.sql.*;
public class SearchAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) {
       
        List list=new ArrayList();
        Dao dao=new Dao();
        try {
            
            ResultSet rs = dao.myResultSet("select * from uload");
            
            while (rs.next()) {
                SearchActionForm searchActionForm =new SearchActionForm();
                searchActionForm.setName(rs.getString(1));
                searchActionForm.setPwd(rs.getString(2));
                list.add(searchActionForm);
                
            }
            if(list!=null)
               {
                   System.out.print("ok~~~"+list.get(1)+"\n");
               }             request.setAttribute("list","list");
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return mapping.findForward("showMsg");
    }
}JSP显示:<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>
showMsg
</title>
</head>
<body bgcolor="#ffffff">
   
<logic:iterate name="list" id = "ls"> 
<bean:write name="ls" property="name"/> 
<bean:write name="ls" property="pwd"/> 
</logic:iterate> </body>
</html>

解决方案 »

  1.   

    request.setAttribute("list","list"); 改成request.setAttribute("list",list); 
      

  2.   

    if(list!=null) 
                  { 
                      System.out.print("ok~~~"+list.get(1)+"\n"); 
                  } 
    这一段代码有危险.
    List list=new ArrayList(); 这里的list并不是null,但它是空的.你用list.get(1)就会报下标越界了,它的下标也是从0开始的
    if(list.size()>0) 
                  { 
                      System.out.print("ok~~~"+list.get(0)+"\n"); 
                  } 
      

  3.   

    无法创建迭代此集合,应该是下标越界。
    if(list.size()>0) 
                  { 
                      System.out.print("ok~~~"+list.get(0)+"\n"); 
                  } 
      

  4.   

    list 没有获得值  按一楼二楼说的改后看结果