`
yelangking
  • 浏览: 21423 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

在jsp中使用JSTL跟El表达式访问和遍历Map集合

    博客分类:
  • java
阅读更多
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:$&nbsp;{map.key};value:$&nbsp;{map1.value}。</h5>
<c:forEach items="${map1}" var="map">
    <h5>key: ${map.key}&nbsp;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>姓名:$&nbsp;{map.name};年龄:$&nbsp;{map1.age}。</h5>
 <h5>姓名:${map1.name};年龄:${map1.age}。</h5>
 <hr/>

上面代码对于明确Map中的key的情况下,是可以采用这种方法访问的。当然,使用[]运算符也可以正常访问,具体jsp代码片段如下:
<h3>3.使用"[]"运算符访问Map</h3>
<h5>姓名:$&nbsp;{map['name']};年龄:$&nbsp;{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表达式遍历Map集合。 ### JSTL EL表达式概述 JSTL(JavaServer Pages Standard Tag Library)是一个JSP标签库,它简化了JSP页面的开发,使得JSP能够更专注于显示逻辑,而不是...

    JSP的JSTL标签和EL表达式大全

    **JSP的JSTL标签和EL表达式详解** JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码来生成动态内容。然而,传统的JSP脚本语法可能导致代码混乱且不易维护。为了解决这个问题...

    jstl 遍历_jstl遍历_

    使用JSTL遍历数据相比直接在JSP页面中使用Scriptlet( &lt;%...%&gt; )进行循环,能够使代码更加整洁且易于维护。此外,由于JSTL标签是在服务器端解析的,因此可以减少客户端(浏览器)的负担,提高页面加载速度。 **6. ...

    EL表达式和jsp JSTL标签库的总结

    通过使用`&lt;jsp:useBean&gt;`标签,可以在JSP页面中创建并使用自定义JavaBean对象,并通过EL表达式来访问这些对象的属性。例如,假设存在两个JavaBean类`A`和`B`,其中`A`包含一个类型为`B`的对象`b`,那么可以通过下面...

    使用EL表达式取集合中的数据

    总的来说,EL表达式和JSTL结合使用,使得在JSP页面上处理服务器端的数据变得更加简洁和高效。它们可以帮助我们方便地访问对象属性、集合中的元素,以及Map中的键值对,极大地提高了Web应用的可读性和维护性。在实际...

    jsp el表达式详解

    JSP EL预定义了一些隐式对象,如`pageContext`、`request`、`response`等,可以直接在EL表达式中使用。这使得开发者无需编写额外的JSP脚本就能访问请求参数或响应头。 **7. EL的优点** - **简洁性**:EL的语法简洁...

    jstl之map,list访问遍历以及el表达式map取值的实现

    本篇文档详细介绍了如何在JSTL中遍历Map和List,并通过EL表达式访问和取值。 首先,让我们了解一下JSTL的基本概念。JSTL定义了几种标签库,如核心标签库、格式化标签库、SQL标签库和XML标签库。核心标签库是最常用...

    jstl两个核心包和jstl标签库EL表达式详解

    通过合理使用JSTL标签库,开发者可以避免在JSP页面中编写过多的Java脚本,而EL则提供了简洁的语法来访问和操作数据。结合`jstl-1.2.jar`和`standard-1.1.2.jar`这两个核心包,可以充分利用JSTL提供的功能,构建高效...

    EL表达式和Jstl详细教程

    EL表达式的语法简洁,它允许开发者以${}的形式在JSP中进行数据的检索和操作。 **1. EL表达式的基本结构** EL表达式通常以美元符号($)和大括号({})包裹,如`${expression}`。其中,`expression`可以是变量、...

    jsp el表达式

    1. **EL与JSP脚本元素**:在JSP 2.0及更高版本中,EL表达式默认启用,无需在页面中使用`&lt;%@ page isELIgnored="false"%&gt;`。 2. **EL与JSP指令**:`&lt;jsp:useBean&gt;`、`&lt;jsp:getProperty&gt;`等JSP指令在EL表达式中通常是...

    09_尚硅谷_EL表达式&JSTL标签库_王振国 - 课堂笔记.pdf

    EL表达式主要用于简化JSP页面中的数据访问,而JSTL(JavaServer Pages Standard Tag Library)标签库则提供了一系列标准的JSP标签,用于实现数据操作、页面流控制、国际化和XML处理等功能。 ### EL表达式...

    EL表达式全解语法中文技术文档

    EL表达式在JSP中扮演着重要角色,它提供了一种简洁的方式来获取和操作JavaBean属性,以及与Java Servlets和JSP作用域对象进行交互。 **二、EL表达式的结构** EL表达式通常以`$`符号开头,后跟大括号`{}`,如`${...

    el表达式的作用 简化页面java代码

    EL表达式是JSP标准标签库(JSTL)的一部分,它提供了一种在视图层直接访问模型数据的方法,避免了在JSP页面中直接编写Java脚本的复杂性。 1. **EL的基本语法** EL表达式通常以`${}`包裹,其中可以包含变量、算术...

    EL表达式和JSTL标签的应用实例

    EL表达式是Java EE中的一种内建的脚本语言,用于在JSP页面中访问JavaBean或其他数据源中的数据。它使用一种简洁的语法,例如`${expression}`,允许开发者直接在页面上进行数据的读取和赋值。EL表达式支持多种运算符...

    el表达式的使用全集

    EL表达式是JSP 2.0及更高版本中引入的特性,它允许开发者以简洁的方式访问JavaBeans属性,以及执行基本的算术和逻辑操作。本文将深入探讨EL表达式的使用全集,通过具体的例子来帮助理解。 **1. EL表达式的基本语法*...

    EL表达式实例[文].pdf

    对于列表或集合,可以使用迭代器进行遍历,虽然在示例中没有给出,但通常会结合JSTL的`c:forEach`标签来实现。 6. 运算符: EL表达式支持多种运算符,如算术运算符(+, -, *, /, %)、比较运算符(==, !=, &lt;, &gt;, , &gt;=...

    jstl读取map.txt

    在JSP页面中使用`&lt;c:forEach&gt;`遍历Map 一旦`java.util.Map`对象被创建并填充了数据,就可以在JSP页面中使用`&lt;c:forEach&gt;`标签来遍历这个Map对象。下面是一个示例代码段: ```jsp ${map}" var="entry"&gt; ${entry....

    EL表达式

    EL表达式是JSP开发中的重要工具,它提供了简洁、高效的方式来访问和操作数据。理解并熟练掌握EL表达式,能够极大地提升Java Web应用的开发效率和代码质量。通过与JSTL等工具的结合,EL表达式可以帮助开发者构建更加...

    JSP中EL表达式用法_动力节点Java学院整理

    EL提供了一系列预定义的隐式对象,可以直接在表达式中使用,如`pageContext`、`request`、`session`和`application`,它们分别对应JSP的四个域。此外,还有`param`、`paramValues`、`header`等用于处理请求参数和头...

Global site tag (gtag.js) - Google Analytics