绿万哥哥
2017-11-22 19:42
<% List<String> fruits = new ArrayList<String>(); fruits.add("watermelon"); //不用request对象的set方法 request.setAttribute("fruit",fruits); %> <c:set value="${fruits}" var="fruit" scope="request"></c:set> <c:foreach items="${requestScope.fruit}" var="f"> <c:out value="${f}"></c:out> </c:foreach>
使用request的setAttribute方法可以存储fruits集合,但使用set标签却存储不了(因为out标签没有输出),这是因为set标签不能存储集合的原因吗?
不知道你解决问题了没,我看了你的例子倒是想明白可。
实例化变量是要申请内存储存值得,set申明的只是引用关系。你例子里没有创建有界对象,<c:set value=
"${fruits}"
var=
"fruit"
scope=
"request"
></c:set> 这一行的 ${fruits} 是空的。只要你在上面把list扔到request里或者其他三个对象里,这才创建出一个有效的有界对象,这个值才能获取到你的List
倒不是那个原因。使用set标签的target 属性,能选择javabean用以存值,也可以通过map类型的键存值,所以使用set标签页可以存放集合。
使用request的原因在与,forEach标签的使用几乎都是用于在页面显示后台查询到的数据,一般从后台数据库获取到的数据都是通过request.setAttribute方法把集合放到一个对象中,在通过调用这个对象在页面中展示值。简单的说就是,使用forEach标签遍历的集合大多数时候都是从后台程序获取的,所以都是存放在请求中。
JSP常用标签
46088 学习 · 80 问题
相似问题