EL表达式怎么获取Map的动态key?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EL表达式怎么获取Map的动态key?相关的知识,希望对你有一定的参考价值。

在EL中,方括号运算符用来检索数组和集合的元素。对于实现 java.util.Map 接口的集合,方括号运算符使用关联的键查找存储在映射中的值。

在方括号中指定键,并将相应的值作为表达式的值返回。例如,表达式 $map['key'] 返回与 map标识符所引用的 Map 中的 "key" 键相关联的值。
当forEach 的items属性中的表达式的值是java.util.Map时,则var中命名的变量的类型就是 java.util.Map.Entry。这时var=entry的话,用表达式$entry.key取得键名。用表达$entry.value得到每个entry的值。这是因为java.util.Map.Entry对象有getKey和getValue方法,表达式语言遵守JavaBean的命名约定。
<%
Map<String,String> map2 = new HashMap();
map2.put("a","hello world");
map2.put("b","this is map");
request.setAttribute("map2",map2);
%>
<br>
键值对遍历 <br>
<c:forEach var="item" items="$map2">
$item.key > $item.value <br>
</c:forEach>
键遍历 <br>
<c:forEach var="item" items="$map2">
$item.key<br>
</c:forEach>
值遍历 <br>
<c:forEach var="item" items="$map2">
$item.value<br>
</c:forEach>
<body>
<br><br>
<%
List<String> list = new ArrayList<String>();
list.add("first");
list.add("second");
List<String> list2 = new ArrayList<String>();
list2.add("aaaaaa");
list2.add("bbbbbb");
Map<String,List<String>> map = new HashMap();
map.put("a",list);
map.put("b",list2);
request.setAttribute("map",map);
%>
通过键获得列表值,并遍历列表 <br>
<c:forEach var="item" items="$map['a']">
$item <br>
</c:forEach><br>
<c:forEach var="item" items="$map['b']">
$item <br>
</c:forEach> <br>
map中值为列表,直接遍历列表中的每一项 <br>
<c:forEach var="item" items="$map">
<c:forEach items="$item.value" var="it">
$it <br>
</c:forEach>
</c:forEach>
参考技术A

EL表达式怎么获取Map的动态key的方法:根据另外一个对象的id作为key来put,或者更加复杂的组合id+"string"作为一个key。

举例如下:

假设有一个情景:我们后台返回一个对象的list,我们根据对象的id作为key放一些关键的值作为value存入Map中。而前台负责显示Map中的关键指标。

我们的目的就是将大于80分的同学显示评级为良。接下来是前端的处理,先引入,标签。

大概就是这样子。如果map的key是一个复杂的组合,例如map(s.getId()+"-3班","良");这样子要获取key的话同样是上面的代码。

备注:如果要对字符串做更复杂的操作,可以自己做标签库,或者使用<%@  taglib  uri="http://java.sun.com/jsp/jstl/functions"   prefix="fn"%>这个标签库。

EL 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

参考技术B

家里的狗狗总是抓身上的痒、掉毛厉害、有时候还有皮屑如何解决?

参考技术C 在EL中,方括号运算符用来检索数组和集合的元素。对于实现 java.util.Map 接口的集合,方括号运算符使用关联的键查找存储在映射中的值。

在方括号中指定键,并将相应的值作为表达式的值返回。例如,表达式 $map['key'] 返回与 map标识符所引用的 Map 中的 "key" 键相关联的值。
当forEach 的items属性中的表达式的值是java.util.Map时,则var中命名的变量的类型就是 java.util.Map.Entry。这时var=entry的话,用表达式$entry.key取得键名。用表达$entry.value得到每个entry的值。这是因为java.util.Map.Entry对象有getKey和getValue方法,表达式语言遵守JavaBean的命名约定。
<%
Map<String,String> map2 = new HashMap();
map2.put("a","hello world");
map2.put("b","this is map");
request.setAttribute("map2",map2);
%>
<br>
键值对遍历 <br>
<c:forEach var="item" items="$map2">
$item.key > $item.value <br>
</c:forEach>
键遍历 <br>
<c:forEach var="item" items="$map2">
$item.key<br>
</c:forEach>
值遍历 <br>
<c:forEach var="item" items="$map2">
$item.value<br>
</c:forEach>
<body>
<br><br>
<%
List<String> list = new ArrayList<String>();
list.add("first");
list.add("second");
List<String> list2 = new ArrayList<String>();
list2.add("aaaaaa");
list2.add("bbbbbb");
Map<String,List<String>> map = new HashMap();
map.put("a",list);
map.put("b",list2);
request.setAttribute("map",map);
%>
通过键获得列表值,并遍历列表 <br>
<c:forEach var="item" items="$map['a']">
$item <br>
</c:forEach><br>
<c:forEach var="item" items="$map['b']">
$item <br>
</c:forEach> <br>
map中值为列表,直接遍历列表中的每一项 <br>
<c:forEach var="item" items="$map">
<c:forEach items="$item.value" var="it">
$it <br>
</c:forEach>
</c:forEach>

JSP ELEL表达式 获取list长度/不用循环,EL在List中直接获取第一项的内容/EL获取Map的键,Map的值

1.EL表达式 获取list长度

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

 

<c:if test="${fn:length(list名字)>1}">

  中间该干嘛干嘛

</c:if>

 

2.不用循环,EL在List中直接获取第一项的内容

${list[0].属性}

 

3.EL获取Map的键,Map的值

<c:forEach items="${map名字}" var="k">
  <option value="${k.key }">${k.value}</option>
</c:forEach>

 

这样分别获取键和值。

 




以上是关于EL表达式怎么获取Map的动态key?的主要内容,如果未能解决你的问题,请参考以下文章

EL表达式怎么获取Map集合中Key为int类型的Value值?

如何用EL表达式获取map的值

el表达式

EL表达式的11个内置对象

EL11个内置对象

JSP ELEL表达式 获取list长度/不用循环,EL在List中直接获取第一项的内容/EL获取Map的键,Map的值