JSTL中读取Map的数据⽅法
JSTL对Map集合的操作
1、迭代
当forEach 的items属性中的表达式的值是java.util.Map时,则var中命名的变量的类型就是java.util.Map.Entry。这时var=entry的话,⽤表达式${entry.key}取得键名。⽤表达式${entry.value}得到每个entry的值。这是因为java.util.Map.Entry对象有getKey和getValue⽅法,表达式语⾔遵守JavaBean的命名约定。
例:
Html代码
<c:forEach items="${map}" var="entry">
<c:out value="${entry.key}" />
<c:out value="${entry.value}" />
</c:forEach>
<c:forEach items="${map}" var="entry">
<c:out value="${entry.key}" />
<c:out value="${entry.value}" />
</c:forEach>
2、根据key求值
如果事先知道key那么很容易根据${map.key值}就可以得到值对象,但是如果key是⼀个变量呢?有⼀个问题,如果给定⼀个key的变量如何使⽤EL得到对象呢,这⾥需要使⽤EL表达式中的[]来解决。
例:
Html代码
<c:out value="${map[key]}" />
<!-- 这⾥的map就是 java.util.Map对像,key是这个map⾥的⼀个key -->
<c:out value="${map[key]}" />
<!-- 这⾥的map就是 java.util.Map对像,key是这个map⾥的⼀个key -->
1、迭代Map的每个对象以key=value的形式给出当forEach tag的item属性中的表达式的值是java.util.Map时,在var中命名的变量被设置为类型是java.util.Map.Entry的item。这时,迭代变量被称为entry,因此,⽤表达式${entry.key}取得键名。
在下⾯的例⼦中你会看到,可以⽤表达式${entry.value}得到每个entry的值。这是因为java.util.Map.Entry对象有getKey和getValue⽅法,表达式语⾔遵守JavaBean的命名约定。
通常,JSP EL表达式${d}是⽤代码a.getB().getC().getD()来计算的。这种表达式是对JavaBean属性的相继调⽤的简化。⽰例: Html 代码
<%@ page language="java" pageEncoding="utf-8"%>
<jsp:directive.page import="com.xa**.vo.BookAdapter"/>
<%@ taglib prefix="c" uri="/WEB-INF/c.tld"  %>
<jsp:directive.page import="java.util.Hashtable"/>
<jsp:directive.page import="com.xa**.vo.Book"/>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html locale="true">
<head>
<%
Hashtable table=new Hashtable();
BookAdapter ba=new BookAdapter();
table.put("aaa",new Book(1,"abc"));
table.put("bbb",new Book(2,"bbb"));
table.put("ccc",new Book(3,"cccc"));
pageContext.setAttribute("table",table);
%>
</head>
<body>
<hr>
<c:forEach items="${table}" var="aaa">
<c:set var="key" value="${aaa.key}" ></c:set>
<c:set var="book" value="${aaa.value}"></c:set>
${key }=${book }111  name:${book.bookID}<br>
</c:forEach>
</body>
</html:html>
<html:html locale="true">
<head>
<%
Hashtable table=new Hashtable();
BookAdapter ba=new BookAdapter();
table.put("aaa",new Book(1,"abc"));
table.put("bbb",new Book(2,"bbb"));
table.put("ccc",new Book(3,"cccc"));
pageContext.setAttribute("table",table);
%>
</head>
<body>
<hr>
<c:forEach items="${table}" var="aaa">
<c:set var="key" value="${aaa.key}" ></c:set>
<c:set var="book" value="${aaa.value}"></c:set>
${key }=${book }111 name:${book.bookID}<br>
</c:forEach>
</body>
</html:html>
2、根据key变量求值
如果事先知道key那么很容易根据${map.key值}就可以得到值对象,但是如果key是⼀个变量呢?
有⼀个问题,如果给定⼀个key的变量如何使⽤EL得到对象呢,这⾥需要使⽤EL表达式中的[]来解决,解决⽅法如⽰例: Html代码
<%@ page language="java" pageEncoding="utf-8"%>
<jsp:directive.page import="com.xa**.vo.BookAdapter"/>
<%@ taglib prefix="c" uri="/WEB-INF/c.tld"  %>
<jsp:directive.page import="java.util.Hashtable"/>
<jsp:directive.page import="com.xa**.vo.Book"/>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html locale="true">
<head>
<%
Hashtable table=new Hashtable();
table.put("aaa",new Book(1,"abc"));
table.put("bbb",new Book(2,"bbb"));
table.put("ccc",new Book(3,"cccc"));
pageContext.setAttribute("table",table);
%>
</head>
<body>
This a struts page. <br>
<c:set var="keys" value="bbb" ></c:set>
session如何设置和读取<c:set var="book" value="${pageScope.table[pageScope.keys]}"></c:set>
${keys }=${book}
<!-- 这⾥的${book就是对应于key值得book对象} -->
<br>
</body>
</html:html>
标签: JSTL <c:set>标签有两种不同的属性设置:var和target。
var“版本”⽤于设置作⽤域属性,target“版本”⽤于设置bean属性或Map值。
这两个版本都有两种形式:有标签体和没有标签体。有标签体的只是放⼊值的另⼀种途径。
★ var“版本”
1. <c:set var="userLevel" scope="session" value="Cowboy"/>
2.
3. <c:set var="fido" value="${person.dog}"/>
4.
5. <c:set var="user" scope="session">
6.    Sheriff, Bartender, Cowgirl
7. </c:set>
如果“value”为null,“var”指定的属性将被删除!
如果“var”指定的属性不存在,则会创建⼀个属性,但仅当“value”不为null时才会创建新属性。
★ target“版本”
1. <c:set target="${petMap}" property="dogName" value="Clover" scope="session"/>
2.
3. <c:set target="${person}" property="name">
4.    ${foo.name}
5. </c:set>
如果“target”是⼀个Map,“property”指定的是该Map的⼀个键;如果“target”是⼀个bean,“property”指定的是该bean的⼀个成员字段。
如果“target”表达式为null,容器会抛出⼀个异常。
如果“target”表达式不是⼀个Map或bean,容器会抛出⼀个异常。
如果“target”表达式是⼀个bean,但是这个bean没有与“property”匹配的成员字段,容器会抛出⼀个异常。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。