EL表达式的简介:
EL表达式是一种JSP技术,能够代替JSP中原本要用Java语言进行显示的语句,(作用:)使得代码更容易编写与维护。最基本的语法是${express}。
EL表达式获取并显示域对象中的属性值:
语法:${域对象Scope.属性名} 或 ${属性名}
例:
获取request域对象中的属性:${requestScope.属性名} 或 ${属性名}
类似于:request.getAttribute(属性名);
EL表达式获取并显示域对象中的数组,中的元素
语法:${域对象Scope.数组名[索引]} 或 ${数组名[索引]} 或 ${域对象['数组名'][索引]}
例:
<%
Object[] obj = new Object[]{"123",123};
session.setAttribute("objs",obj);
%>
${sessionScope['objs'][0]} 或 ${objs[0]}
EL表达式获取并显示域对象中的集合,中的元素
语法:${域对象Scope.集合名[索引]}或${集合名[索引]}
例:
<%
List<Integer> nums = new ArrayList<Integer>();
nums.add(Integer.valueOf("100"));
nums.add(200);
nums.add(new Integer(300));
pageContext.setAttribute("num",nums);
Map<String,Object> map = new HasMap<>();
map.put("name","哈哈");
map.put("age",123);
map.put("sex",“男”);
pageContext.setAttribute("map",map);
%>
List集合:
${num[0]}<br/>
${num[1]}<br/>
${num[2]}<br/>
Map集合:
${map['name']}
注:如果是Set集合则索引为每个元素的位置,如果是Map集合则索引 为map集合中的键值;
EL表达式获取域对象中javabean对象中的属性值:
<%
Person p = new Person();
Address address = new Address();
address.setCity("浙江");//Adress类中有个私有String属性为city
p.setName("mike");//Person类中有私有String属性为name
p.setAddress(address);//Person类中有私有Adress属性为address
session.setAttribute("person", p);//存入sessionScope
%>
${person.name}( 从WEB域中找到键值为person的对象,然后再person对象中找到 name属性)
${person.address.city}(先获取域对象中的javabean对象,然后又获取javabean对象中的address对象,再从中获取city属性)
使用[]方式获取:
${person['name']}
${person['address']['city']}
EL表达式中执行运算:
A)语法:${运算表达式}
B)常见运算符:==(eq) !=(ne) <(lt) >(gt) <=(le) >=(ge) &&(and) ||(or) !(not)
C)判断是否为空:${empty name }
注:如果获取判断的对象为空字符串或null都会返回true;
D)三目运算符:${name == null?"null":name }
EL表达式获取值的原理:
原理:EL表达式在获取某个对象的属性值时,先将某个属性值首字母变成大写,然后加上get前缀,拼接成getter方法,通过反射将该对象构建出来,然后再对该对象执行getter方法,这与私有属性并没有关系,所以要注意,JavaBean的属性名要小写,且要有getter方法,不然会报错。
注:
1)、 EL表达式只能读数据,不能修改数据。
2)、EL表达式只能出现在静态部分,不能出现在java代码块中。
3)、 EL表达式不会抛出异常,在出现异常时,EL表达式将会以空白显示。
4)、表达式只能从四大域中读取数据。
5)、如果四大域内中有相同属性名,那么EL表达式将会从最小范围的域依次往最大域查找
域对象的范围(由小到大):page→request→session→appliction;
6)、查找到相关内容后将会停止查找,并显示查找到的第一条数据。
7)、如果没有查找到对应的值,则会返回空字符串,而不是null;
8)、除了用.方式获得对象的属性,也可以用[ ]方式,当然遇到键值名字中有特殊意义的字符,如 '-'(mike-abc)、'.'(aa.bb.cc)或者key值为数字开头,则只能用[ ]方式。
网友评论