请看
request.setAttribute("a",fm);
pageForm并不是一个Collection类,而logic:iterator要求必须是ArrayList,HashSet....这样的集合类你可以把你要循环输出的类方到一个ArrayList集合里作为pageForm的一个属性具体用法改成:
 <logic:iterate id="b" name="Form" property="userList">
   <td><bean:write name="b" property="name"/></td>
            <td><bean:write name="b" property="psw"/></td>
   </logic:iterate>
而你这里应该改成一个javaBean而不是用pageForm,他是FormBean呀,
pagemain.PageForm(rs.getString(1),rs.getString(2));
呵呵,好好看看吧,老兄,good luck

解决方案 »

  1.   

    最基本的,PageForm不是一个集合类,也不是数组模式等,只是一个普通对象,这个用logic:iterate是不可以取出来的。
    这些都是最基础的东西,楼主把structs的基础再看看就明白了,这样问反而浪费时间,看看基本资料,然后写个小demo就ok了。
      

  2.   

    真不是我不看书,我在网上看了很多资料,还买了本书(实战STRUTS),就是理解不了这个标签的用法```
    按照 Octer(米粒)的说法,我把集合做为属性放到了PageForm.java里:
    PageForm.java
    package com.yourcompany.struts.action;import java.util.ArrayList;
    import java.sql.ResultSet;
    import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.ActionForm;public class PageForm extends ActionForm
    {
    private String name="";
    private String psw="";

    public void setName(String name)
    {
    this.name=name;
    }

    public void setPsw(String psw)
    {
    this.psw=psw;
    }

    public String getName()
    {
    return name;
    }

    public String getPsw()
    {
    return psw;
    }

    public void PageForm(String name,String psw)
    {
    this.name=name;
    this.psw=psw;
    }

    public ArrayList start(int intPageCount,int currentPage,int intPageSize,ResultSet rs)
    {
    ArrayList arrayList = new ArrayList();
    if(intPageCount>0)
    {
    try
    {
    rs.absolute((currentPage-1) * intPageSize + 1);
    int i = 0;
    HttpServletRequest request=null;
    while(i<intPageSize && !rs.isAfterLast())
    {
    PageForm pagemain=new PageForm();
    pagemain.PageForm(rs.getString(1),rs.getString(2));
    arrayList.add(pagemain);
    rs.next();
    i++;
    }
    }

    catch(Exception e)
    {
    System.out.println("query error:"+e);
    }
    }
    return arrayList;
    }
    }PageAction.java
    package com.yourcompany.struts.action;import java.util.*;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;import com.yourcompany.struts.action.PageForm;public class PageAction extends Action { public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) {
    String action;        
    action=request.getParameter("action");
    PageController pagecontroller=new PageController();
    pagecontroller.Controller();
    pagecontroller.intPage(action);
    ArrayList arrayList=null;
    PageForm fm=new PageForm();
    arrayList=fm.start(pagecontroller.intPageCount,
    pagecontroller.currentPage,pagecontroller.intPageSize,pagecontroller.rs);
    Iterator it= arrayList.iterator(); while(it.hasNext())
    {
    fm=(PageForm)it.next();

    request.setAttribute("a",fm);
    return (mapping.findForward("success"));
    }}        <logic:iterate id="b" name="Form" >
    <td><bean:write name="b" property="name"/></td>
                <td><bean:write name="b" property="psw"/></td>
            </logic:iterate>还是出现错误,书上说iterate标签和集合类一起用,说的很不详细。
    javax.servlet.jsp.JspException: Cannot create iterator for this collection
    org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:310)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:111)
    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.   

    用:
            <td><bean:write name="a" property="name"/></td>
            <td><bean:write name="a" property="psw"/></td>
    可以得到正确输出,加上
            <logic:iterate id="b" name="a" >
                <td><bean:write name="b" property="name"/></td>
                <td><bean:write name="b" property="psw"/></td>
            </logic:iterate>
    就出错。
      

  4.   

    PageAction.java
    package com.yourcompany.struts.action;import java.util.*;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;import com.yourcompany.struts.action.PageForm;public class PageAction extends Action { public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) {
    String action;        
    action=request.getParameter("action");
    PageController pagecontroller=new PageController();
    pagecontroller.Controller();
    pagecontroller.intPage(action);
    ArrayList arrayList=null;
    PageForm fm=new PageForm();
    arrayList=fm.start(pagecontroller.intPageCount,
    pagecontroller.currentPage,pagecontroller.intPageSize,pagecontroller.rs);
    PageForm c=(PageForm)arrayList.get(1);
    request.setAttribute("a",c);
    return (mapping.findForward("success"));
    }}用:
            <td><bean:write name="a" property="name"/></td>
            <td><bean:write name="a" property="psw"/></td>
    可以得到正确输出,加上
            <logic:iterate id="b" name="a" >
                <td><bean:write name="b" property="name"/></td>
                <td><bean:write name="b" property="psw"/></td>
            </logic:iterate>
    就出错。
      

  5.   

    好人做到底,给你写段代码:
    看了你的代码,感觉你是要做一个分页程序
    请把这段代码:public ArrayList start(int intPageCount,int currentPage,int intPageSize,ResultSet rs)中函数内容改成:
    javaben:
    public class User 
    {
       private String name="";
    private String psw="";

    public void setName(String name)
    {
    this.name=name;
    }

    public void setPsw(String psw)
    {
    this.psw=psw;
    }

    public String getName()
    {
    return name;
    }

    public String getPsw()
    {
    return psw;
    }}
    public ArrayList start(int intPageCount,int currentPage,int intPageSize,ResultSet rs)
    {
    ArrayList arrayList = new ArrayList();
    if(intPageCount>0)
    {
    try
    {
    rs.absolute((currentPage-1) * intPageSize + 1);
    int i = 0;
    HttpServletRequest request=null;
    while(i<intPageSize && !rs.isAfterLast())
    {
    User user=new User();
    user.setPsw(rs.getString(2));
                                                  user.setName(rs.getString(1));
    arrayList.add(user);
    rs.next();
    i++;
    }
    }

    catch(Exception e)
    {
    System.out.println("query error:"+e);
    }
    }
    return arrayList;
    }
    在PageForm改为:
    public class PageForm extends ActionForm
    {
         //discard the psw and name properties
         private ArrayList userList= new ArrayList();
    }
      

  6.   

    继续:
    public class PageForm extends ActionForm
    {
             //discard the psw and name properties
         private ArrayList userList= new ArrayList();     public void setUserList(List userlist)
         {
             this.userList = userlist;
          }
           public List getUserList()
    {
    return userList;
    }
            .....................     }
    然后将action 中的execute方法的
    arrayList=fm.start(pagecontroller.intPageCount,
    pagecontroller.currentPage,pagecontroller.intPageSize,pagecontroller.rs);
    PageForm c=(PageForm)arrayList.get(1);
    request.setAttribute("a",c);
    改为:
    arrayList=this.start(pagecontroller.intPageCount,
    pagecontroller.currentPage,pagecontroller.intPageSize,pagecontroller.rs);
    ((PageForm)form).setUserList(arrayList);
    在jsp中这样写:<html:form action="youraction" >
        <logic:iterate id="b" name="Form" property="userList">
       <td><bean:write name="b" property="name"/></td>
                <td><bean:write name="b" property="psw"/></td>
       </logic:iterate>
    </html:form>
    改写完毕!
      

  7.   

    多谢Octer,已经成功!
    改为:
    arrayList=this.start(pagecontroller.intPageCount, pagecontroller.currentPage,pagecontroller.intPageSize,pagecontroller.rs);
    //((PageForm)form).setUserList(arrayList);
    request.setAttribute("a",arrayList);
    这样可以吗?我看到很多例子是用request.setAttribute()。
    <logic:iterate id="b" name="a" type="com.yourcompany.struts.action.PageBean">
       <td><bean:write name="b" property="name"/></td>
                <td><bean:write name="b" property="psw"/></td>
    </logic:iterate>
      

  8.   

    An iterator over a collection.  Iterator takes the place of Enumeration in
     the Java collections framework.  Iterators differ from enumerations in two
     ways: 
      Iterators allow the caller to remove elements from the underlying collection during the iteration with well-defined semantics.
      Method names have been improved.