我用的JBuilder2005;出错的过程是这样的
首先跳转到一个action里面,这个action的作用是读数据库的值,然后跳转到一个jsp页面显示出那些值,显示的时候用的是struts的logic和bean标签。经过调试发现,错误是在从action跳转到jsp页面的时候发生的,也就是在return actionmapping.findforward("XXXX");这条语句之后;
请明白的大侠帮忙看看!~谢谢!!~~~

解决方案 »

  1.   

    return actionmapping.findforward("XXXX");返回后还执行
      

  2.   

    下面是出错的提示:
    javax.servlet.ServletException: Cannot create iterator for this collection
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
    org.apache.jsp.typeAdd_jsp._jspService(typeAdd_jsp.java:374)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
    org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    root cause javax.servlet.jsp.JspException: Cannot create iterator for this collection
    org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:310)
    org.apache.jsp.typeAdd_jsp._jspService(typeAdd_jsp.java:286)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
    org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      

  3.   

    取出来的数据是存入actionform,然后再放入数组中,然后把数组存入session。
      

  4.   

    以下是action的代码:
    public class TypeShowAction extends Action {    public ActionForward execute(ActionMapping mapping,
                                     ActionForm actionForm,
                                     HttpServletRequest request,
                                     HttpServletResponse response) throws
                IOException {
    //        TypeForm tf = (TypeForm) actionForm;
            ConnectionBean cb = new ConnectionBean();
            ResultSet rs = null;
            ArrayList arr = new ArrayList();
            HttpSession session = request.getSession(true);
            String state = request.getParameter("state");
            if (state=="add" || state.equals("add")) {            rs = cb.dbSelect("select * from cy_articleclass order by cy_Order ");            try {
                    while (rs.next()) {
                        TypeForm tf = new TypeForm();
                        tf.setTypeId(rs.getInt(1));
                        String nbsp = "";
                        for (int i = 0; i < rs.getInt(5); i++) {
                            nbsp += "&nbsp;&nbsp;";
                        }                    tf.setTypeName(nbsp + rs.getString(2));
                        tf.setTypeRootID(rs.getInt(3));
                        tf.setTypePID(rs.getInt(4));
                        tf.setTypeLevel(rs.getInt(5));
                        tf.setTypeChild(rs.getInt(6));
                        tf.setTypeOrder(rs.getInt(7));
                        tf.setTypePath(rs.getString(8));
                        tf.setTypeDir(rs.getString(9));
                        tf.setTypePageNum(rs.getInt(10));
                        tf.setTypeSummary(rs.getString(11));
                        tf.setTypeMetaSummary(rs.getString(12));                    arr.add(tf);                }                session.setAttribute("type", arr);
                    rs.close();
                    cb.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }            return mapping.findForward("showParentType");
            } else {
                if (state=="show" || state.equals("show")) {
                    rs = cb.dbSelect(
                            "select * from cy_articleclass order by cy_Order");                try {
                        while (rs.next()) {
                            TypeForm tf = new TypeForm();
                            tf.setTypeId(rs.getInt(1));
                            String nbsp = "";
                            for (int i = 0; i < rs.getInt(5); i++) {
                                nbsp += "&nbsp;&nbsp;";
                            }
                            tf.setTypeName(nbsp + rs.getString(2));
                            tf.setTypeRootID(rs.getInt(3));
                            tf.setTypePID(rs.getInt(4));
                            tf.setTypeLevel(rs.getInt(5));
                            tf.setTypeChild(rs.getInt(6));
                            tf.setTypeOrder(rs.getInt(7));
                            tf.setTypePath(rs.getString(8));
                            tf.setTypeDir(rs.getString(9));
                            tf.setTypePageNum(rs.getInt(10));
                            tf.setTypeSummary(rs.getString(11));
                            tf.setTypeMetaSummary(rs.getString(12));                        arr.add(tf);                    }                    session.setAttribute("type", arr);
                        rs.close();
                        cb.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }            }
                return mapping.findForward("showAllType");
            }
        }    
    }
      

  5.   

    jsp就这一个地方用了标签:
    <TR>
        <TD>所属分类:</TD>
        <TD><SELECT size=1 name="typePID" onchange="find(this.value);">
          <option value="0">无(作为第一类)</option>
          <logic:present name="type">
              <logic:iterate id="type" name="type">
                <logic:present name="type">
                  <option value="<bean:write name="type" property="typeId"/>">
                    <bean:write name="type" property="typeName" filter="false"/>
                  </option>
                </logic:present>
              </logic:iterate>
            </logic:present>
            </SELECT></TD>
        <TD><SPAN class=red></SPAN><SPAN class=gray></SPAN></TD></TR>
      

  6.   

    我记得在html:itrator得源码中看见过这个错误,导致这个错误的原因是itrator枚举的时候引用到了ActionForm中的容器,一般我们会用List,它用这个接口产生一个Itrator来枚举数据,但是如果你用了其它的容器,就会出现不能枚举的错误,楼主食不是用了html:itrator标签?
      

  7.   

    简化一下你的html先测试一下<SELECT size=1 name="typePID" onchange="find(this.value);">
    <option value="0">无(作为第一类)</option>
    <logic:iterate id="type" name="type">
    <option value="<bean:write name="type" property="typeId"/>">
    <bean:write name="type" property="typeName" filter="false"/>
    </option>
    </logic:iterate>
    </SELECT>
      

  8.   

    源码是这样写的,你看一下:
          if (collection.getClass().isArray()) {
                try {
                    // If we're lucky, it is an array of objects
                    // that we can iterate over with no copying
                    iterator = Arrays.asList((Object[]) collection).iterator();
                } catch (ClassCastException e) {
                    // Rats -- it is an array of primitives
                    int length = Array.getLength(collection);
                    ArrayList c = new ArrayList(length);
                    for (int i = 0; i < length; i++) {
                        c.add(Array.get(collection, i));
                    }
                    iterator = c.iterator();
                }
            } else if (collection instanceof Collection) {
                iterator = ((Collection) collection).iterator();
            } else if (collection instanceof Iterator) {
                iterator = (Iterator) collection;
            } else if (collection instanceof Map) {
                iterator = ((Map) collection).entrySet().iterator();
            } else if (collection instanceof Enumeration) {
                iterator = new IteratorAdapter((Enumeration) collection);
            } else {
                JspException e = new JspException(messages.getMessage("iterate.iterator"));
                TagUtils.getInstance().saveException(pageContext, e);
                throw e;
            }messages.getMessage("iterate.iterator")输出的信息就是楼主看见的Cannot create iterator for this collection
      

  9.   

    html:itrator标签  这个标签我没用过阿
      

  10.   

    刚才用了最笨也是最彻底的方法,把html代码一个个加进原来做的jsp页面了,结果一切正常了,不再报错,也能读数据库里的值了,我猜想问题就出在html代码里,因为美工不是我来负责,原来的jsp页面在功能测试时是好使的,加上了美工给的html代码(复制-->粘贴)后就出了问题了,所以我把美工给的代码一段一段对应我的jsp页面加了进去,结果,错误消失了。
    美中不足就是到最好也没真正找到错误的根源,只是排除了错误而已。
      

  11.   

    html:itrator我写错了,是logic:itrator