请看
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
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
解决方案 »
- struts.xml中extends= json-default 显示undefined
- jsp获取参数的问题
- 请介绍一些网站流量统计的方法
- java读出a.xml文件中的所有节点,选中几个保存成一个新的b.xml
- 急求一个hibernate搜索的问题???
- rmi中命令rmic/rmiregistry能否像com.sun.tools.javac.Main javac在JAVA程序中动态编译
- 请教一个jsp小问题,谢谢大家了!!!!!!!!
- wl7.0与sql 数据库池连接。。
- 关于UIUC的NER系统Java包的使用
- 程序员妹子遇难题,欧巴在哪里!?
- struts中如何修改记录
- 请教一下spring如何配置的问题.谢谢大家帮助.
这些都是最基础的东西,楼主把structs的基础再看看就明白了,这样问反而浪费时间,看看基本资料,然后写个小demo就ok了。
按照 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)
<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>
就出错。
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>
就出错。
看了你的代码,感觉你是要做一个分页程序
请把这段代码: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();
}
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>
改写完毕!
改为:
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>
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.