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表达式所需jar,standard.jar/jstl.jar等jar包
此资源系本人在培训机构的资料,资料包含JSP中的JSTL标准标签库和EL表达式的详细讲解及演示代码,其中还包含了课堂讲课文档等等!希望对大家有所帮助
NULL 博文链接:https://li1314aishui.iteye.com/blog/1314537
Web前端开发,开发jsp的时候。使用EL表达式以及JSTL标签时,所需的两个jar包。 ???????????????
EL表达式言语和JSTL EL表达式言语和JSTL EL表达式言语和JSTL
本资源代码中包含jstl的标签库定义以及自定义EL标签使用的详细说明,参见压缩文件中说明即可,欢迎各位技术员下载参考及使用
JSTL使用教程 JSTL教学 Struts1.X
对JSTL和EL表达式的部分标签的解释说明和例子,是我初学时学习和应用的一些内容”” scope=”” test=””/> <c:chose><c:when>标签
JSP JSTL EL表达式中FN函数使用帮助
EL表达式及JSTL里三个主要标签实现表的增删改查
el表达式,EL表达式言语和JSTL 很不错的资料啊
struts jstl el表达式示例代码 struts jstl el 表达式 源码
JSP中JSTL提供的函数标签EL表达式操作字符串的方法
JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,E L(Expression Language) 目的:为了使JSP写起来更加简单。
在使用 EL 从 scope 中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。 Web 服务器对于 request 请求参数通常会以 String 类型来发送,在得到时使用的 Java 语言脚本就应该是 request.getParameter(“XXX...
该实例是jsp服务器页面开发中经常使用的EL表达式和标准标签库的重要语法应用实例程序,对初学者来说应该是很好的Demo。
JAVAEE实验报告EL表达式和jstl标签库的使用.pdf
jstl+EL ,一些简单的代码实现,主要介绍了EL的语法,以及JSTL的几个常用标签,需要的可以下载查看。