问答详情
源自:3-8 JSTL标签之forEach标签(上)

不使用request对象的set方法,而用JSTL的set标签可以保存这个集合fruits吗?

<%
    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标签不能存储集合的原因吗?

提问者:绿万哥哥 2017-11-22 19:42

个回答

  • 慕丝0202390
    2019-01-16 15:39:30

    不知道你解决问题了没,我看了你的例子倒是想明白可。

    实例化变量是要申请内存储存值得,set申明的只是引用关系。你例子里没有创建有界对象,<c:set value="${fruits}" var="fruit" scope="request"></c:set> 这一行的 ${fruits} 是空的。只要你在上面把list扔到request里或者其他三个对象里,这才创建出一个有效的有界对象,这个值才能获取到你的List

  • Queen丶Star
    2017-11-30 09:39:11

    倒不是那个原因。使用set标签的target 属性,能选择javabean用以存值,也可以通过map类型的键存值,所以使用set标签页可以存放集合。

    使用request的原因在与,forEach标签的使用几乎都是用于在页面显示后台查询到的数据,一般从后台数据库获取到的数据都是通过request.setAttribute方法把集合放到一个对象中,在通过调用这个对象在页面中展示值。简单的说就是,使用forEach标签遍历的集合大多数时候都是从后台程序获取的,所以都是存放在请求中。