hashtable 与<logic:iterate>的小问题
是这样的我建了一个GoodsBean类,
package datasource;public class GoodsBean {
private String id=null;
private String name=null;
private String price=null;

public void setId(String id)
{
this.id=id;
}
public void setName(String name)
{
this.name=name;
}
public void setPrice(String price)
{
this.price=price;
}
public String getId()
{
return this.id;
}
public String getName()
{
return this.name;
}
public String getPrice()
{
return this.price;
}
}
在网页中把这个类的实例装入Hashtable中,
在用<logic:iterate>判断所它显示出来
网页如下
<%@ page language="java" pageEncoding="gbk"%>
<%@ page import="java.util.Hashtable"%>
<%@ page import="datasource.GoodsBean"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<html:base /> <title>showdata.jsp</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--></head><body>
<%
Hashtable h1 = new Hashtable();
GoodsBean gb1 = new GoodsBean();
GoodsBean gb2 = new GoodsBean();
gb1.setId("1");
gb1.setName("长虹");
gb1.setPrice("69000");
h1.put(gb1.getId(), gb1);
gb2.setId("2");
gb2.setName("海信");
gb2.setPrice("7000");
h1.put(gb2.getId(), gb2);
session.setAttribute("goods1", h1);
%>
<logic:iterate id="element" indexId="ind" name="goods1">
<bean:write name="ind" />.<bean:write name="element" property="key" />
<br>
<logic:iterate id="elementValue" name="element" property="value" length="5" offset="0">
<bean:write name="elementValue" />
<br>
</logic:iterate>
</logic:iterate>
</body>
</html:html>可连接网页时就出错,
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: Cannot create iterator for this collection
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.showdata_jsp._jspService(org.apache.jsp.showdata_jsp:226)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
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:265)
org.apache.jsp.showdata_jsp._jspService(org.apache.jsp.showdata_jsp:166)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.
--------------------------------------------------------------------------------Apache Tomcat/5.5.9
我试了一下如果把hashtable不存goodsBean 而放数组就好用,例如
Hashtable h = new Hashtable();
String aaa[] = { "aaa1", "aaa2" };
String bbb[] = { "bbb1", "bbb2" };
h.put("a", aaa);
h.put("b", bbb);
session.setAttribute("goods", h);
就能正常显示不知为什么,请大家帮帮忙.当然用其它方法能让它显示出来,
我就想知道用struts 的标签能否实现

解决方案 »

  1.   

    GoodsBean放入hashtable中的对象没有实现比较和序列化,
    数组中的字符串String实现了此方法
      

  2.   

    我不太明白为啥楼主要在页面把GoodsBean放入HashTable中呢?
      

  3.   

    我是想把hashtable 的实例的内容用struts上的标签显示出来,如何写
      

  4.   

    Hashtable h1 = new Hashtable();
    GoodsBean gb1 = new GoodsBean();
    GoodsBean gb2 = new GoodsBean();
    gb1.setId("1");
    gb1.setName("长虹");
    gb1.setPrice("69000");
    h1.put(gb1.getId(), gb1);
    gb2.setId("2");
    gb2.setName("海信");
    gb2.setPrice("7000");
    h1.put(gb2.getId(), gb2);俺还真没这么用过!不知道这样的好处是什么?
      

  5.   

    师兄我告诉你!
    在struts-config.xml里加入
    <message-resources parameter="ApplicationResources"/>
    就可以了
      

  6.   

    我感觉有点明白楼主的意思了,用数组能显示而用Hashtable不能显示,楼主应该少写了一层<logic:iterate>。