EL表达式
四个域的寻找顺序时:page,request,session,application。
使用EL表达式的时候,如果找不到键值为name的属性值不会显示为null,而是显示空字符串。如果确定键值是在request域中,就可以使用下面的这个EL表达式:
${requestScope.name}
从web域中的封装了的数据中得到对象的某个属性值且显示出来。代码如下:
<% 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}
${person['name']}<!-- 也可以用[]方式 -->
${person['address']['city']}
从List集合对象中获取某个值并显示。
<%
List<Person> list = new ArrayList<Person>();
list.add(new Person("aaa"));
list.add(new Person("bbb"));
list.add(new Person("ccc"));
application.setAttribute("list_1", list);
%>
${expression}
EL提供“•”和“[ ]”两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,例如“•”或者“?”等非字母或非数字的符号,就一定要用“[ ]”,比如:${user.My-name}应该写为${user[“My-Name”]}
如果要实现动态取值时,就可以用“[ ]”来做,而“•”无法做到动态取值。例如:${sessionScope.user[data]}中data是一个变量;
EL表达式原理及注意点:
原理:EL表达式在获取某个对象的属性值时,先将某个属性值首字母变成大写,然后加上get前缀,拼接成getter方法,通过反射将该对象构建出来,然后再对该对象执行getter方法,这与私有属性并没有关系,所以要注意,JavaBean的属性名要小写,且要有getter方法,不然会报错。
EL表达式执行运算
语法:${运算表达式}
常见运算符:==(eq) !=(ne) <(lt) >(gt) <=(le) >=(ge) &&(and) ||(or) !(not)
判断是否为空:${empty name }
三目运算符:${name == null?"null":name }
利用C标签,将List集合数据遍历出来:
<c:forEach items="${passenger}" var="ps">
<li style="height: 32px;margin-top: 5px;">
<div>${ps.passengerName}</div>
<div>${ps.orderNum}</div>
<div>${ps.startDate}</div>
<div>${ps.adultTicket}</div>
<div>${ps.startTime}</div>
<div>${ps.pnrNum}</div></li>
</c:forEach>