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表达式${a.b.c.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>
<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”匹配的成员字段,容器会抛出一个异常。
分享到:
相关推荐
jstl读取map.txt
Struts的增删改查分页 入门级的经典项目,带数据库的sql数据文件 包含JSTL读取MAP集合 批量删除 还有实现全选,反选, 只是前台的jsp页面未作页面校验,望各位输入到数据库的数据的合法性 保证下载 导入文件和...
JSTL日期格式化处理 ${param.date}" var="date" pattern="yyyy/MM/dd:HH:mm:ss>
下面小编就为大家带来一篇jstl之map,list访问遍历以及el表达式map取值的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
JSTL函数JSTL函数JSTL函数JSTL函数JSTL函数JSTL函数JSTL函数JSTL函数
JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签
jstl-1.2.1,之前的版本需要在服务器中配置一下,而且它分成了两个jar(jstl.jar和standard.jar)还有一个tld文件,而1.2已经不用配置了,直接把javax.servlet.jsp.jstl-1.2.1.jar和javax.servlet.jsp.jstl-api-1.2.1...
jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2...
jstl 自带语法 可对 el穿过来的参数进行处理 格式化或者处理字符串
JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>JSTL>>>
jstl帮助 jstl帮助手册 jstl帮助文档
jstl,jstl实例源码jstl,jstl实例源码
jstl标签详解jstl标签详解jstl标签详解jstl标签详解jstl标签详解jstl标签详解jstl标签详解
jstl-api-1.2和jstl-impl-1.2,jstl-api-1.2和jstl-impl-1.2,jstl-api-1.2和jstl-impl-1.2,jstl-api-1.2和jstl-impl-1.2
综合的JSTL练习实例,JSTL表情的用法
JSTL中文帮助文档 JSTL中文帮助文档 JSTL中文帮助文档 。。。
jstl 表达式 很好的例子!! 欢迎下载使用
javabean+jsp+jstl+sql server2005实现的分页 每页显示5条信息,出现页面的前后三页
用jstl做的项目 没有一句class源码 全用页面实现 很强的