c:forEache标签 List Map 遍历输出

来源:互联网 发布:mac的windows支持软件 编辑:程序博客网 时间:2024/06/16 03:11

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 listaa1bb1cc1

还有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>











原创粉丝点击