为了账号安全,请及时绑定邮箱和手机立即绑定

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

正在回答

2 回答

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

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

0 回复 有任何疑惑可以回复我~
#1

慕丝0202390

其实和你说的和setAttribute就是一个意思 把一个存在的数据 绑定到某一个 有界对象上
2019-01-16 回复 有任何疑惑可以回复我~

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

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

0 回复 有任何疑惑可以回复我~
#1

绿万哥哥 提问者

set标签和request的setattribute方法其实是一样的吧,只是我在这段这句标签中存不进去这个集合,要怎么修改呢按你的说法的话
2017-11-30 回复 有任何疑惑可以回复我~
#2

Queen丶Star 回复 绿万哥哥 提问者

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

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信