`

Java_EL表达式从数组 Map List集合取值

    博客分类:
  • Java
 
阅读更多

via: http://blog.sina.com.cn/s/blog_7ffb8dd501013z1n.html

 

Jstl是sun的标准taglib库,Jstl是标签库和el语言的结合。

el 表达式的隐含对象pageScope,requestScope,sessionScope,applicationScope,比如${hello}语 句首先会从pageScope开始逐个查找scope中的属性,指定域对象语句为${requestScope.hello}

 

1.与 [ ] 运算符  

EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的: ${sessionScope.user.sex}等于${sessionScope.user["sex"]}

. 和 [ ] 也可以同时混合使用,如下: ${sessionScope.shoppingCart[0].price}

回传结果为shoppingCart中第一项物品的价格。

 

不过,以下两种情况,两者会有差异:

(1) 当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或以数字开头的符号,就一定要使用 [ ],例如:${user.My-Name } 应当改为:${user["My-Name"] }

(2) 我们来考虑下列情况:

${sessionScope.user[data]}

此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex}; 假若data 的值为"name"时,它就等于${sessionScope.user.name}。因此,如果要动态取值时,就可以用上述的方法来做,但. 无法做到动态取值。

注意:(使用[]时,里面是String类型要加双引号“”!!!!!,是数字,就直接写数字,不要加双引号)

 

(3)数组或集合的索引只能使用[]    如:${sessionScope.user[0]}     ${sessionScope.list[1].name}

 

属性值:${hello}

对象值

姓名:${user.username}

年龄:${user.age}

所属组:${user.group.name}

 

1、map集合

在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);

%>

键值对遍历

<c:forEach var="item" items="${map2}">

${item.key} > ${item.value} <br>

</c:forEach>

键遍历

<c:forEach var="item" items="${map2}">

${item.key}<br>

</c:forEach>

值遍历

<c:forEach var="item" items="${map2}">

   ${item.value}<br>

 </c:forEach>

根据键遍历值

<c:forEach var="item" items="${map2}">

  ${item['a']}<br>

  ${item['b']}<br>

</c:forEach>

 

<%

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();//(List<Map(k,v)>同理)

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>

 

但是要注意,如果你的numberMap是这样的:

HashMap<Integer, String> numberMap= new HashMap<Integer, String>();

numberMap.put(0, "零");

numberMap.put(1, "一");

在jsp页面中${numberMap[1]}将取不到值,因为el表达式中数字1是Long类型,无法匹配到numberMap中的Integer 1 。明白了原理,事儿就好办了。修改numberMap:

HashMap<Long, String> map = new HashMap<Long, String>();

map.put(0L, "零");

map.put(1L, "一");

然后就随心所欲哈${numberMap[1]}

 

2、数组

假设Action中有数组

Char[] char={“1”.”2”};

request.setAttribute(“char”,char);

${char[1]}

 

数组中的对象

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}

 

list集合(set集合同理)

List list=new ArrayList();

list.add(user1);

list.add(user2);

list.add(user3);

request.setAttribute(“list”,list);

 

取单个值: ${list[3].username}

遍历取值:<c:forEach var="user" items="${list}">

            <c:out value="${user.username}" />

         </c:forEach>

 

el表达式对运算符的支持

1+2=${1+2}

10/5=${10/5}

10 div 5=${10 div 5}

10%3=${10%3}

10 mod 3=${10 mod 3}

 

el表达式支持算数运算符和逻辑运算符

el表达式的函数

判断值是否为空: ${empty  scope中的属性名}

判断值为非空: ${!empty  scope中的属性名}

 

--------------------------------------------

via: http://ihuangweiwei.iteye.com/blog/1185200

 

EL表达式简述

 

一.jsp禁用EL表达式的三种方式

1.使用斜杠"\"符号   \${expression}

2.使用page指令 <%@ pageisELIgnored="true|false"%>

3.在web.xml文件中配置<el-ignored>元素

    <jsp-config>

        <jsp-property-group>

            <url-pattern>*.jsp</url-pattern>

            <el-ignored>true</el-ignored>

        </jsp-property-group>

    </jsp-config>

    

三.EL表达式的运算符

 

1.存取数据运算符[]和.

    通常情况,我们可以通过"."运算符获得指定对象的属性。

    但当属性中包含一些特殊符号("."或者"-"等非字母或数字符号)时,可以用[]格式访问属性值。

    如:${sessionScope.user[user-name]}

    

    同样,可以使用"[]"运算符来读取数组

    如:${sessionScope.fruit[1]}

    

    Map集合元素的获取,假如有一个key为fruit的键值对,我们可以如下获取

    如:${sessionScope.fruit["frutit"]}

 

2.算术运算符(+、-、*、/或div、%或mod)

注:%或者mod为求余运算符

    如:${15%4} 返回值为3

 

3.关系运算符

    ==或eq    等于

    !=或ne       不等于

    <或lt     小于

    >或gt     大于

    <=或le    小于等于

    >=或ge    大于等于

    注意:在使用EL表达式关系运算符时,不能够写成:

     ${param.pwd1} == ${param.pwd2} 或 ${${param.pwd1} == ${param.pwd2}}

     而应写成:${param.pwd1 == param.pwd2}     

     

4.逻辑运算符

    1.&&或and运算符

    2.||或or运算符

    3.!或not运算符

        ${! username == "mr"}

 

5.empty运算符(特殊的运算符)

    用来确定一个对象或者变量是否为null或者空。

    ${empty expression}

    同时可以跟not运算符结合使用,用于确定一个对象或者变量是否为非空。

    ${not empty expression}    

    

6.条件运算符

    ${条件表达式?计算表达式1:计算表达式2}    

    ${empty user ? "user is null ": user}

 

四.EL函数介绍

 

1:fn:toLowerCase函数将一个字符串中包含的所有字符转换为小写形式,并返回转换后的字符串,它接收一个字符串类型的参数。

例如:

fn:toLowerCase("Www.IT315.org") 的返回值为字符串“www.it315.org”  

fn:toLowerCase("")的返回值为空字符串  

 

2:fn:toUpperCase函数将一个字符串中包含的所有字符转换为大写形式,并返回转换后的字符串,它接收一个字符串类型的参数。

例如:

fn:toUpperCase("Www.IT315.org") 的返回值为字符串“WWW.IT315.ORG”  

fn:toUpperCase("")的返回值为空字符串  

 

3:fn:trim函数删除一个字符串的首尾的空格,并返回删除空格后的结果字符串,它接收一个字符串类型的参数。需要注意的是,fn:trim函数不能删除字符串中间位置的空格。

fn:trim(" www.it315.org ") 的返回值为字符串“www.it 315.org”。  

 

4:fn:length函数返回一个集合或数组大小,或返回一个字符串中包含的字符的个数,返回值为int类型。fn:length函数接收一个参数,这个参数可以是<c:forEach>标签的items属性支持的任何类型,包括任意类型的数组、java.util.Collection、java.util.Iterator、java.util.Enumeration、java.util.Map等类的实例对象和字符串。

如果fn:length函数的参数为null或者是元素个数为0的集合或数组对象,则函数返回0;如果参数是空字符串,则函数返回0。

 

5:fn:split函数以指定字符串作为分隔符,将一个字符串分割成字符串数组并返回这个字符串数组。

fn:split函数接收两个字符串类型的参数,第一个参数表示要分割的字符串,第二个参数表示作为分隔符的字符串。

fn:split("www.it315.org", ".")[1]的返回值为字符串“it315”。  

 

6:fn:join函数以一个字符串作为分隔符,将一个字符串数组中的所有元素合并为一个字符串并返回合并后的结果字符串。fn:join函数接收两个参数,第一个参数是要操作的字符串数组,第二个参数是作为分隔符的字符串。

如果fn:join函数的第二个参数是空字符串,则fn:join函数的返回值直接将元素连接起来。

例如: 假设stringArray是保存在Web域中的一个属性,它表示一个值为{"www","it315","org"}的字符串数组,则

fn:join(stringArray, “.")返回字符串“www.it315.org”  

fn:join(fn:split("www,it315,org", ","), ".") 的返回值为字符串www.it315.org”  

 

7:fn:indexOf函数返回指定字符串在一个字符串中第一次出现的索引值,返回值为int类型。fn:indexOf函数接收两个字符串类型的参数,如果第一个参数字符串中包含第二个参数字符串,那么,不管第二个参数字符串在第一个参数字符串中出现几次,fn:indexOf函数总是返回第一次出现的索引值;如果第一个参数中不包含第二个参数,则fn:indexOf函数返回-1。如果第二个参数为空字符串,则fn:indexOf函数总是返回0。

fn:indexOf("www.it315.org","t3") 的返回值为5  

 

8:fn:contains函数检测一个字符串中是否包含指定的字符串,返回值为布尔类型。fn:contains函数在比较两个字符串是否相等时是大小写敏感的。

fn:contains函数接收两个字符串类型的参数,如果第一个参数字符串中包含第二个参数字符串,则fn:contains函数返回true,否则返回false。如果第二个参数的值为空字符串,则fn:contains函数总是返回true。实际上,

fn:contains(string, substring)等价于fn:indexOf(string, substring) != -1。  

忽略大小的EL函数:fn:containsIgnoreCase  

 

9:fn:startsWith函数用于检测一个字符串是否是以指定字符串开始的,返回值为布尔类型。

fn:startsWith函数接收两个字符串类型的参数,如果第一个参数字符串以第二个参数字符串开始,则函数返回true,否则函数返回false。如果第二个参数为空字符串,则fn:startsWith函数总是返回true。

例如: fn:startsWith("www.it315.org","it315")的返回值为false  与之对应的EL函数:fn:endsWith  

 

10:fn:replace函数将一个字符串中包含的指定子字符串替换为其它的指定字符串,并返回替换后的结果字符串。fn:replace方法接收三个字符串类型的参数,第一个参数表示要操作的源字符串,第二个参数表示源字符串中要被替换的子字符串,第三个参数表示要被替换成的字符串。

例如: fn:replace("www it315 org", " ", ".")的返回值为字符串“www.it315.org”  

 

11:fn:substring函数用于截取一个字符串的子字符串并返回截取到的子字符串。fn:substring函数接收三个参数,第一个参数是用于指定要操作的源字符串,第二个参数是用于指定截取子字符串开始的索引值,第三个参数是用于指定截取子字符串结束的索引值,第二个参数和第三个参数都是int类型,其值都从0开始。

例如: fn:substring("www.it315.org", 4, 9) 的返回值为字符串“it315”  

 

13:fn:substringAfter函数用于截取并返回一个字符串中的指定子字符串第一次出现之后的子字符串。fn:substringAfter函数接收两个字符串类型的参数,第一个参数表示要操作的源字符串,第二个参数表示指定的子字符串。

fn:substringAfter(“www.it315.org”, “.”)的返回值为字符串“it315.org”。  

与之对应的EL函数为:fn:substringBefore  

分享到:
评论

相关推荐

    EL表达式在前后台的取值赋值问题

    ### EL表达式在前后台的取值赋值问题详解 #### 一、EL表达式概述 EL(Expression Language)表达式是一种简洁的方式,用于获取JavaBean属性或执行简单运算。在JSP页面中,它提供了从请求作用域、会话作用域、应用...

    EL表达式(转)

    - **方括号操作符**(`[]`):比点号操作符更灵活,可以用于访问数组、List 和 Map。例如,`${musicList[0]}` 或 `${musicList["0"]}` 可以访问列表 `musicList` 的第一个元素。 - 方括号内的内容可以是变量表达式...

    el表达式的相关介绍

    EL表达式能够方便地访问JavaBean属性、Map对象、集合以及各种作用域中的属性。 1. **EL表达式的基本语法**: - `${expression}`是EL表达式的基本格式,其中`expression`是你要执行的表达式。 - 点号`.`操作符用于...

    EL表达式 jsp

    除了点号操作符,EL还支持方括号(`[]`)操作符,它更灵活,可用于访问数组、List,甚至可以进行嵌套访问,如`${musicList[0]}`。如果索引值是动态的,方括号是必要的。EL还提供了多种隐式对象,如`pageContext`、`...

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

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

    el表达式教程

    这里`fruit`是一个字符串数组,`fruitMap`是一个`Map`,`fruitList`是一个`List`。 #### 变量访问 EL表达式支持访问不同范围内的变量,包括: - **PageScope**:当前页面范围内定义的变量。 - **RequestScope**:...

    JSP EL表达式详细介绍

    EL表达式还支持访问Java中的集合对象,如`List`、`Map`等,使得在JSP页面中处理复杂数据结构变得简单。 ### 8. 函数调用 EL表达式允许开发者调用Java类中的静态方法。开发者可以创建自定义函数,然后在EL表达式中...

    java el jstl学习手册

    4. **`expr-a` 为 List 或数组类型**: - 尝试将 `expr-b` 转换为整数索引。 - 如果转换失败或者索引超出范围,则返回 `null`。 - 否则返回对应的元素值。 5. **`expr-a` 为 JavaBean 对象**: - 尝试通过 `...

    JSTL、EL、ONGL、Struts标签的区别

    - `%{#name}`: 从值栈的 map 中取值。 - `%{name}`: 从值栈的对象栈中取值。 - `%{#request.name}`: 从 request 域中取值。 **构建数据**: - 构建 Map: `&lt;s:iterator var="map" value="#{'key1':'value1','key2':'...

    EL&JSTL技术手册

    - **基本语法**: 所有EL表达式均以 `${` 开头,以 `}` 结尾。 - 示例: `${sessionScope.user.sex}` 表示获取存储在Session范围内的用户性别。 - 与传统JSP Scriptlet相比,EL语法更加简洁、直观。 - 对比: `User ...

    详解javaweb中jstl如何循环List中的Map数据

    之后,将这个list添加到了model对象中,这样JSP页面就可以通过EL表达式访问到这个list了。 接下来,我们需要在JSP页面中展示这个list中的数据。第一种方式是直接在标签中通过items属性指定要迭代的list集合,通过...

    Struts2页面取值总结

    - **迭代遍历**: `&lt;s:iterator value="userList" ...&gt;`用于遍历集合如List或Map,配合`&lt;s:property&gt;`展示集合中的每个元素。 - **URL生成**: `&lt;s:url action="" ...&gt;`用于生成URL并可通过`s:param`子元素传递参数。...

    OGNL中文参考手册.pdf

    - **集合构造**:创建新的集合对象,如列表`List`、数组、地图`Map`等。 - **集合投影**:对集合中的每个元素执行某种操作,返回新的集合。 - **选择元素**:从集合中选择满足条件的元素。 - **调用构造函数**:创建...

    轻量 J2EE 应用程序开发-MVC with Webwork2 – Xwork

    List、Array 和 Map 是 OGNL 中的三种基本数据结构,用于存储和操作数据。集合操作是 OGNL 中的一种重要功能,包括投影和选择等操作。层次型 MVC 和 ValueStack 是 J2EE 中的一种常见架构模式,用于管理应用程序的...

Global site tag (gtag.js) - Google Analytics