c:forEache标签 List Map 遍历输出

本文介绍了在JSP中使用c:forEach标签遍历List<Map<String,String>>的情况,详细展示了Servlet中处理数据并传递到JSP页面的过程。通过示例代码,解释了如何在Servlet中构建List<Map<String,String>>,并在JSP页面中遍历输出。同时也提到了遍历List<Bean>和Map<Object,Object>的类似方法。" 120248266,11223984,Hive实战:分区分桶与三表交集解析,"['Hive', '大数据处理', 'SQL查询', '数据仓库', 'HQL']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c:forEache 标签 List<Map<String,String>>,List<Object>遍历实例 

(以eclispe下jsp+servlet操作,其他情况也是一样的)

想看List<Map<String,String>>直接下拉到最后大笑

List<Map<String,String>> List<Object>

1.纯List<Obeject>

首先需要导入两个jar包

jstl.jar 

standard.jar 这两个包在tomcat中就有然后在jsp页面中引用

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
不引用eclipse会提示找不到标签tag,如果用idea开发可以省略


(1)

Servlet中代码

List<String> list=new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");
        request.setAttribute("list", list);
        request.getRequestDispatcher("NewFile.jsp").forward(request, response);



JSP页面代码,点击href请求servlet 然后把数据返回过来


<a href="./ListController">get data</a>
<table>
<tr>
<td>list</td>
</tr>

<c:forEach items="${list}" var="text">
<tr>
<td>${text}</td>
</tr>

</c:forEach>
</table>


运行结果

(2)List<Bean>类型遍历

其实这都是一样的道理,你只需要在List中添加一个bean类型对象,然后对它的属性分别调用

Bean类


Servlet进行添加


List<Person> list=new ArrayList<Person>();
		Person p1=new Person("frank",21,"male");
		Person p2=new Person("Jun",22,"female");
        list.add(p1);
        list.add(p2);
        request.setAttribute("list", list);
        request.getRequestDispatcher("NewFile.jsp").forward(request, response);



JSP页面操作


<table>
<tr>
<td>list</td>
</tr>

<c:forEach items="${list}" var="person">
<tr>
<td>${person.name}</td>
<td>${person.age}</td>
<td>${person.sex}</td>
</tr>

</c:forEach>
</table>



最终显示




(2)Map<object,Object>类型遍历

servlet


JSP页面



<a href="./ListController">get data</a>
<table>
<tr>
<td>list</td>
</tr>

<c:forEach items="${map}" var="map">
<tr>
<td>${map.key}</td>
<td>${map.value}</td>
</tr>

结果

get data 
  
list
aa1
bb1
cc1

还有Map<String,Bean>等情况的其实跟List的都是一个思路在这里就不说了,自己好好钻研一下子就会啦

还有一种比较巧妙的结构 那就是List<Map<String,String>>这种结构  下面来演示

Servlet代码


List<Map<String,String>> list=new ArrayList<Map<String,String>>();  
		Map<String,String> map1=new HashMap<String,String>();
		map1.put("a", "a1");
		map1.put("a2", "a2");
		list.add(map1);
		Map<String,String> map2=new HashMap<String,String>();
		map2.put("b", "b1");
		list.add(map2);
		Map<String,String> map3=new HashMap<String,String>();
		map3.put("c", "c1");
		list.add(map3);
		request.setAttribute("list", list);
        request.getRequestDispatcher("NewFile.jsp").forward(request, response);




JSP层  这里需要两层的key value 层

<table>
<tr>
<td>key</td>
<td>value</td>
</tr>

<c:forEach items="${list}" var="maps">
<c:forEach items="${maps}" var="map">
<tr>
<td>${map.key}</td>
<td>${map.value}</td>
</tr>
</c:forEach>
</c:forEach>



结果

get data 
key value 
a a1 
a2 a2 
b b1 
c c1 


还有一种情况是比较特殊的  在进行sql语言查询返回List<Map<String,String>>的时候,如果sql语言是这样的

select id,name from person;

public List<Map<String,String>> getIdAndName();

如果是这样的话,那么一定要注意 你想要取到你想要的key value 值的话使用两层c:forEach标签的时候可能会出现每次遍历id和Name,如果我们只想要name显示出来呢,比如select 标签 把id赋值给 option的value来进行传送而name显示在网页上供数据查看
那么这个时候你的c:forEach标签就要这样写,我以<select>为例

//这个在本地测试能用,但是到线上缺会报503作物
<select id="select_id">
<option value="0">example</option>
<c:forEach items="${list}" var="maps">
<option value="${maps.get('id')}">${maps.get("name")}</option>
</c:forEach>
</select>

PS://更完善正规的写法
<option value="${maps.ID}">${maps.NAME}</option>











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值