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

来源:3-8 JSTL标签之forEach标签(上)

绿万哥哥

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

写回答 关注

2回答

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

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

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

    慕丝0202...

    其实和你说的和setAttribute就是一个意思 把一个存在的数据 绑定到某一个 有界对象上

    2019-01-16 15:40:52

    共 1 条回复 >

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

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

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

    Queen丶... 回复绿万哥哥

    误解你的意思了!你说的这个问题,不行。因为这不是存储关系。setAttribute()方法,相对于是创建了一个键值对,你可以通过键去调用值,但是你不能把值存到键上去。"fruit"并不是一个对象,他不能去存放fruits集合。set标签不能实例化一个集合,只能通过键去调用值,所以不能通过像你说的通过set标签去存放集合,这本身就不是存储关系。这么说能懂吗。。

    2017-11-30 11:26:04

    共 2 条回复 >

JSP常用标签

配置及使用常用JSTL标签,这是一项必备的基本技能

46090 学习 · 80 问题

查看课程

相似问题