EL表达式取 Map、 List和数组的值
Jstl是sun的標(biāo)準(zhǔn)taglib庫,Jstl是標(biāo)簽庫和el語言的結(jié)合。
el 表達(dá)式的隱含對(duì)象pageScope,requestScope,sessionScope,applicationScope。
1. [ ]與.運(yùn)算符
EL 提供 . 和 [ ] 兩種運(yùn)算符來導(dǎo)航數(shù)據(jù)。
下列兩者所代表的意思是一樣的:
user.name等于{user[“name”]}
. 和 [ ] 也可以同時(shí)混合使用,如下:
${sessionScope.userList[0].name},回傳結(jié)果為userList中第一個(gè)用戶的名字。
注意:使用[]時(shí),里面是String類型要加雙引號(hào)“”,是數(shù)字,就直接寫數(shù)字,不要加雙引號(hào)
2. map集合
在EL中,方括號(hào)運(yùn)算符用來檢索數(shù)組和集合的元素。對(duì)于實(shí)現(xiàn) java.util.Map 接口的集合,方括號(hào)運(yùn)算符使用關(guān)聯(lián)的鍵查找存儲(chǔ)在映射中的值。在方括號(hào)中指定鍵,并將相應(yīng)的值作為表達(dá)式的值返回。
例如,表達(dá)式 ${map['key']}返回與 map標(biāo)識(shí)符所引用的 Map 中的 “key” 鍵相關(guān)聯(lián)的值。當(dāng)forEach 的items屬性中的表達(dá)式的值是java.util.Map時(shí),則var中命名的變量的類型就是 java.util.Map.Entry。這時(shí)var=entry的話,用表達(dá)式${entry.key}取得鍵名。 用表達(dá)${entry.value}得到每個(gè)entry的值。這是因?yàn)閖ava.util.Map.Entry對(duì)象有g(shù)etKey和getValue方法,表達(dá)式語言遵守JavaBean的命名約定。
對(duì)map根據(jù)鍵遍歷值
<c:forEach var="item" items="${map}"> ${item['key1']}<br> ${item['key2']}<br> </c:forEach> <% List<String> list = new ArrayList<String>(); list.add("str1"); list.add("str2"); List<String> list2 = new ArrayList<String>(); list2.add("str3"); list2.add("str4"); Map<String,List<String>> map = new HashMap();//(List<Map(k,v)>同理) map.put("list",list); map.put("list2",list2); request.setAttribute("map",map); %>通過鍵獲得列表值,并遍歷列表
<c:forEach var="item" items="${map['list']}"> ${item } </c:forEach> <c:forEach var="item" items="${map['list2']}"> ${item } </c:forEach>map中值為列表,直接遍歷列表中的每一項(xiàng)
<c:forEach var="item" items="${map}"> <c:forEach items="${item.value}" var="item2"> ${item2 } </c:forEach> </c:forEach>但是要注意,如果你的numberMap是這樣的:
HashMap<Integer, String> numberMap= new HashMap<Integer, String>(); numberMap.put(0, "零"); numberMap.put(1, "一");在jsp頁面中${numberMap[1]}將取不到值,因?yàn)閑l表達(dá)式中數(shù)字1是Long類型,無法匹配到numberMap中的Integer 1 。明白了原理,事兒就好辦了。修改numberMap:
HashMap<Long, String> map = new HashMap<Long, String>(); map.put(0L, "零"); map.put(1L, "一");然后就可以啦${numberMap[1]}。
3. 數(shù)組
假設(shè)Controller中有數(shù)組 Char[] char={“1”.”2”}; request.setAttribute(“char”,char); ${char[1]} 數(shù)組中的對(duì)象 User[] users=new User[10]; for(int i=0;i<10;i++) { User u=new User(); u.setUsername(“U_”+i); users[i]=u; } request.setAttribute(“users”,users); ${users[1].username}4. list集合(set集合同理)
List list=new ArrayList(); list.add(user1); list.add(user2); list.add(user3); request.setAttribute(“list”,list); 取單個(gè)值: ${list[3].username} 遍歷取值:<c:forEach var="user" items="${list}"> <c:out value="${user.username}" /> </c:forEach> 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的EL表达式取 Map、 List和数组的值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 方立勋_30天掌握JavaWeb_Ser
- 下一篇: 序列、触发器和存储过程三者之间有啥关系