代码如下,topic为一个实体bean,有author属性,为说明起见,author 赋0,1,2值,但是发现 <c:forEach>中没有遍历
[code]
<%
List<Topic> list = new ArrayList<Topic>();
[color=green]Topic topic = new Topic(); [/color]
for(int i= 0 ;i <3;i++)
{
topic.setAuthor(i+"");
list.add(topic);
System.out.println("author:" + topic.getAuthor());
}
request.setAttribute("topicTest",list);
%>
<c:forEach items="${requestScope.topicTest}" var="topic">
${topic.author}<br>
</c:forEach>
[code]
注意绿色的代码,他 的位置应该放在for循环中,因为放在外面时,在FOR循环中每次仅仅是修改topic.autho的值,再将修改后的topic对象的一个副本存入到集合中而已,所以最终的结果是所有的topic属性值均相同,造成没有循环的假象。
[code]
<%
List<Topic> list = new ArrayList<Topic>();
[color=green]Topic topic = new Topic(); [/color]
for(int i= 0 ;i <3;i++)
{
topic.setAuthor(i+"");
list.add(topic);
System.out.println("author:" + topic.getAuthor());
}
request.setAttribute("topicTest",list);
%>
<c:forEach items="${requestScope.topicTest}" var="topic">
${topic.author}<br>
</c:forEach>
[code]
注意绿色的代码,他 的位置应该放在for循环中,因为放在外面时,在FOR循环中每次仅仅是修改topic.autho的值,再将修改后的topic对象的一个副本存入到集合中而已,所以最终的结果是所有的topic属性值均相同,造成没有循环的假象。
本文通过一个具体的代码示例介绍了在使用JSP进行页面元素遍历时可能遇到的一个常见错误——所有元素显示相同值的问题。该问题源于将实体对象初始化放在了循环外部,导致每次循环实际上只是修改了实体对象的某个属性值而并未创建新的对象实例。
2934





