Struts中使用标签显示List对象的问题

luket 2007-07-30 01:51:15
Action中代码
ListIterator it = this.tnewsDAO.findByProperty("id.classid", 1).listIterator();
request.setAttribute("it", ls.listIterator());

JSP中代码
<logic:present name="it"><logic:iterate name="it" id="it" scope="request">
${it.classname}
</logic:iterate></logic:present>

现在为在传送it对象的同时 附带一个文本字符串变量过去,所以又使用了一个List对象保存,修改代码如下
Action中代码
List ls = new ArrayList();
ListIterator it = this.tnewsDAO.findByProperty("id.classid", 1).listIterator();
ls.add(new Object[] { it, "测试文本" });
request.setAttribute("it", ls.listIterator());

JSP中代码
<logic:present name="it"><logic:iterate name="it" id="it" scope="request">
${it}
</logic:iterate></logic:present>

显示的结果是
java.util.AbstractList$ListItr@7a8313
测试文本
说明传递和获取都正确了
请问如何在JSP中写代码将java.util.AbstractList$ListItr@7a8313中的classname变量显示出来···
...全文
4960 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
shashadezhu888 2009-12-23
  • 打赏
  • 举报
回复
很好,又学一个知识点。
波波七 2009-09-11
  • 打赏
  • 举报
回复
看样子我也要好好学学这方面的知识了!!
luket 2007-08-30
  • 打赏
  • 举报
回复
谢谢各位尤其 sureyor 以前一直没有弄懂其中的原因和方法,前段时间下工夫重新把一些书啃了一遍 发现原来答案离我原来如此的近。也和大家共勉一下,有问题多看书,基础才是最重要的。不能只知道怎样做而要知道为什么这样做。···几天来的感受 废话多了 结题!
sureyor 2007-08-01
  • 打赏
  • 举报
回复
我常用的写法:
Action中:
request.setAttribute("response", form);
form的resultList对应楼主的变量it

JSP中:
<logic:present name="response" property="resultList">
<logic:iterate name="response" id="item" property="resultList" scope="request">
<logic:iterate id="subItem" name="item" indexId="index">
<logic:equal name="index" value="0">
${subItem.classname}
</logic:equal>
<logic:equal name="index" value="1">
${subItem}
</logic:equal>
</logic:iterate>
</logic:iterate>
</logic:present>
sureyor 2007-08-01
  • 打赏
  • 举报
回复
如果在action中:
request.setAttribute("it", form);
id和name都是it是没有错误的
shine333 2007-08-01
  • 打赏
  • 举报
回复
问题出在你<logic:iterate>的id和name用了同一个。

Struts标签,还有<jsp:useBean>中id都是定义一个变量,而name都是引用一个变量的意思。

<logic:iterate>,循环name(或者name.property,当然还有其它条件),每一次当前元素被命名为id

所以后面用item是对的
sureyor 2007-08-01
  • 打赏
  • 举报
回复
写错啦:

<logic:present name="it">
<logic:iterate name="it" id="it" scope="request">
<logic:iterate id="item" name="it" indexId="index">
<logic:equal name="index" value="0">
${item.classname}
</logic:equal>
<logic:equal name="index" value="1">
${item}
</logic:equal>
</logic:iterate>
</logic:iterate>
</logic:present>
sureyor 2007-08-01
  • 打赏
  • 举报
回复
try try:

<logic:present name="it">
<logic:iterate name="it" id="it" scope="request">
<logic:iterate id="item" name="it_item" indexId="index">
<logic:equal name="index" value="0">
${item.classname}
</logic:equal>
<logic:equal name="index" value="1">
${item}
</logic:equal>
</logic:iterate>
</logic:iterate>
</logic:present>
luket 2007-07-30
  • 打赏
  • 举报
回复
<logic:iterate></logic:iterate>中间用的是<bean:write>,name的值就是id的值
但在碰到集合对象的时候又出问题
luket 2007-07-30
  • 打赏
  • 举报
回复
两层迭代
<logic:present name= "it " >
<logic:iterate name= "it " id= "it1 " scope= "request " >
<logic:iterate name= "it1 " id= "it2 " scope= "request " >
${it2}
</logic:iterate >
</logic:iterate >
</logic:present >
会出错,因为如果循环中的it不是一个集合对象而是那个字符串对象,循环则会出问题
zjf405 2007-07-30
  • 打赏
  • 举报
回复
你要显示classname啊~
我的方法好象有点问题,当我没说~呵呵
zjf405 2007-07-30
  • 打赏
  • 举报
回复
上面如果不行的话,那就将"测试文本"先装入一个ArrayList,然后添加到数组里面
List ls = new ArrayList();
ListIterator it = this.tnewsDAO.findByProperty("id.classid", 1).listIterator();
ls.add(new Object[] { it, new ArrayList().add("测试文本") });
request.setAttribute("it", ls.listIterator());
zjf405 2007-07-30
  • 打赏
  • 举报
回复
两层迭代
<logic:present name="it">
<logic:iterate name="it" id="it1" scope="request">
<logic:iterate name="it1" id="it2" scope="request">
${it2}
</logic:iterate>
</logic:iterate>
</logic:present>
zhj92lxs 2007-07-30
  • 打赏
  • 举报
回复
学习中
wyhlgx 2007-07-30
  • 打赏
  • 举报
回复
初步看了看,打印出来的仍然是一个集合的东西,你再在循环中加入循环就可以读出来了。采用双层循环。
jingtao8177 2007-07-30
  • 打赏
  • 举报
回复
up
leonhe_cn 2007-07-30
  • 打赏
  • 举报
回复
呵呵,在<logic:iterate></logic:iterate>中间用的是<bean:write>,name的值就是id的值

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧