1.背景
这段时间在项目中遇到在一个jsp页面中需要访问Map集合。可能各位同行和朋友在开发javaWeb 的时候,用的较多的是List<Bean>这样的集合,针对这类的集合访问比较简单,但是我在遍历Map<K,V> 这样的集合时,着实是费了一点心思。下面的代码样例都是在此背景(jsp、jstl、el、Map)下完成。
2.相关知识点
1.关于jsp和jstl不再解释,具体请查阅相关资料或者书籍。
2.EL,为什么要解释EL表达式呢,因为本文就是介绍如何使用EL表达来访问Map对象,以及EL的取值方式对于访问Map<K,V>这样的集合的特殊之处。
3.什么是EL表达式,以及EL的用处:JSP表达式语言(ExpressionLanguage),简称EL,最初定义在JSTL1.0规范中,直到JSP2.0之后,EL表达式才正式成为JSP规范中的一部分。EL为存取变量、表达式运算和读取内置对象等内容提供了新的操作方式。
4.EL取值方式
EL提供(.)和([])两种运算符来存取数据,即使用点运算符(.)和方括号运算符([])。那么EL是如何运用这两个运算符来取值的呢?这应该跟javaBean的规范有关,凡是提供了getXXX()的标准bean,都可以在访问范围(jsp的访问范围)中使用EL表达式取值。闲言少叙,进入正题,如何访问Map呢?
3.正文
1.使用${map.key}和${map.value}访问集合
原理:以HashMap为例,通过查看HashMap的源码,你可以发现在HashMap中提供了如下的方法:
public final K getKey() {
return key;
}
public final V getValue() {
return value;
}
jsp代码片段:
<h3>1.使用"."运算符遍历Map</h3>
<h5>key:$ {map.key};value:$ {map1.value}。</h5>
<c:forEach items="${map1}" var="map">
<h5>key: ${map.key} value:${map.value}</h5>
</c:forEach>
<hr/>
使用上述代码访问map时,其实就是调用了getKey()和getValue()这两个方法。
2.对于已经知道map中的key,如何直接获取key对应的value
原理:以HashMap为例,通过看源码,其内部提供了如下方法:
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}
/**
* Offloaded version of get() to look up null keys. Null keys map
* to index 0. This null case is split out into separate methods
* for the sake of performance in the two most commonly used
* operations (get and put), but incorporated with conditionals in
* others.
*/
private V getForNullKey() {
for (Entry<K,V> e = table[0]; e != null; e = e.next) {
if (e.key == null)
return e.value;
}
return null;
}
jsp 代码片段:
<h3>2.使用"."运算符访问Map</h3>
<h5>姓名:$ {map.name};年龄:$ {map1.age}。</h5>
<h5>姓名:${map1.name};年龄:${map1.age}。</h5>
<hr/>
上面代码对于明确Map中的key的情况下,是可以采用这种方法访问的。当然,使用[]运算符也可以正常访问,具体jsp代码片段如下:
<h3>3.使用"[]"运算符访问Map</h3>
<h5>姓名:$ {map['name']};年龄:$ {map1['age']}。</h5>
<h5>姓名:${map1['name']};年龄:${map1['age']}。</h5>
使用这种方式时,请注意 具体的key请使用双引号或者单引号包含起来,以表示作为整体key。
使用这种方式访问map的时候,有一种特殊情况需要注意。后台 map.put(1, value1) , 前台 ${map[1]}将取不到值。原因:el表达式中数字1是Long类型,无法匹配后台map中的int。 修改 map.put(0L, value); 前台 :${map[1]}.
3.当key不是明确的,是一个变量时,如何访问Map?原理跟第2条相似,jsp代码有所不同
<
h3>4.当key是变量时,使用"[]"运算符访问Map</h3>
<c:set var="key" value="name"></c:set>
<h5>通过变量key获取的姓名:${map1[key]}</h5>
<hr/>
4.结语
本文是自己的一个总结和思考,其实在项目中用的多的是list,而list中存储的都是标准的javaBean,因此使用起来比较简单。而针对于Map这种比较特殊的集合,如果把其中的源码稍微看一下,知道里面的getKey()和getValue(),以及get(key)这三个方法了之后,在EL中取Map的值就会得心应手了。欢迎各位前辈和同行拍砖指正,一起交流进步。详细代码和运行截图见附件。
欢迎转载,地址:
http://yelangking.iteye.com/blog/2042913
运行效果:
- 大小: 190.6 KB
分享到:
相关推荐
下面我们将详细介绍如何使用JSTL EL表达式遍历Map集合。 ### JSTL EL表达式概述 JSTL(JavaServer Pages Standard Tag Library)是一个JSP标签库,它简化了JSP页面的开发,使得JSP能够更专注于显示逻辑,而不是...
**JSP的JSTL标签和EL表达式详解** JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码来生成动态内容。然而,传统的JSP脚本语法可能导致代码混乱且不易维护。为了解决这个问题...
使用JSTL遍历数据相比直接在JSP页面中使用Scriptlet( <%...%> )进行循环,能够使代码更加整洁且易于维护。此外,由于JSTL标签是在服务器端解析的,因此可以减少客户端(浏览器)的负担,提高页面加载速度。 **6. ...
通过使用`<jsp:useBean>`标签,可以在JSP页面中创建并使用自定义JavaBean对象,并通过EL表达式来访问这些对象的属性。例如,假设存在两个JavaBean类`A`和`B`,其中`A`包含一个类型为`B`的对象`b`,那么可以通过下面...
总的来说,EL表达式和JSTL结合使用,使得在JSP页面上处理服务器端的数据变得更加简洁和高效。它们可以帮助我们方便地访问对象属性、集合中的元素,以及Map中的键值对,极大地提高了Web应用的可读性和维护性。在实际...
JSP EL预定义了一些隐式对象,如`pageContext`、`request`、`response`等,可以直接在EL表达式中使用。这使得开发者无需编写额外的JSP脚本就能访问请求参数或响应头。 **7. EL的优点** - **简洁性**:EL的语法简洁...
本篇文档详细介绍了如何在JSTL中遍历Map和List,并通过EL表达式访问和取值。 首先,让我们了解一下JSTL的基本概念。JSTL定义了几种标签库,如核心标签库、格式化标签库、SQL标签库和XML标签库。核心标签库是最常用...
通过合理使用JSTL标签库,开发者可以避免在JSP页面中编写过多的Java脚本,而EL则提供了简洁的语法来访问和操作数据。结合`jstl-1.2.jar`和`standard-1.1.2.jar`这两个核心包,可以充分利用JSTL提供的功能,构建高效...
EL表达式的语法简洁,它允许开发者以${}的形式在JSP中进行数据的检索和操作。 **1. EL表达式的基本结构** EL表达式通常以美元符号($)和大括号({})包裹,如`${expression}`。其中,`expression`可以是变量、...
1. **EL与JSP脚本元素**:在JSP 2.0及更高版本中,EL表达式默认启用,无需在页面中使用`<%@ page isELIgnored="false"%>`。 2. **EL与JSP指令**:`<jsp:useBean>`、`<jsp:getProperty>`等JSP指令在EL表达式中通常是...
EL表达式主要用于简化JSP页面中的数据访问,而JSTL(JavaServer Pages Standard Tag Library)标签库则提供了一系列标准的JSP标签,用于实现数据操作、页面流控制、国际化和XML处理等功能。 ### EL表达式...
EL表达式在JSP中扮演着重要角色,它提供了一种简洁的方式来获取和操作JavaBean属性,以及与Java Servlets和JSP作用域对象进行交互。 **二、EL表达式的结构** EL表达式通常以`$`符号开头,后跟大括号`{}`,如`${...
EL表达式是JSP标准标签库(JSTL)的一部分,它提供了一种在视图层直接访问模型数据的方法,避免了在JSP页面中直接编写Java脚本的复杂性。 1. **EL的基本语法** EL表达式通常以`${}`包裹,其中可以包含变量、算术...
EL表达式是Java EE中的一种内建的脚本语言,用于在JSP页面中访问JavaBean或其他数据源中的数据。它使用一种简洁的语法,例如`${expression}`,允许开发者直接在页面上进行数据的读取和赋值。EL表达式支持多种运算符...
EL表达式是JSP 2.0及更高版本中引入的特性,它允许开发者以简洁的方式访问JavaBeans属性,以及执行基本的算术和逻辑操作。本文将深入探讨EL表达式的使用全集,通过具体的例子来帮助理解。 **1. EL表达式的基本语法*...
对于列表或集合,可以使用迭代器进行遍历,虽然在示例中没有给出,但通常会结合JSTL的`c:forEach`标签来实现。 6. 运算符: EL表达式支持多种运算符,如算术运算符(+, -, *, /, %)、比较运算符(==, !=, <, >, , >=...
在JSP页面中使用`<c:forEach>`遍历Map 一旦`java.util.Map`对象被创建并填充了数据,就可以在JSP页面中使用`<c:forEach>`标签来遍历这个Map对象。下面是一个示例代码段: ```jsp ${map}" var="entry"> ${entry....
EL表达式是JSP开发中的重要工具,它提供了简洁、高效的方式来访问和操作数据。理解并熟练掌握EL表达式,能够极大地提升Java Web应用的开发效率和代码质量。通过与JSTL等工具的结合,EL表达式可以帮助开发者构建更加...
EL提供了一系列预定义的隐式对象,可以直接在表达式中使用,如`pageContext`、`request`、`session`和`application`,它们分别对应JSP的四个域。此外,还有`param`、`paramValues`、`header`等用于处理请求参数和头...