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 a a1 b b1 c c1
还有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>为例
那么这个时候你的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>