如果你将一个字符串放进request里面,如果我们用jsp的知识来在前台取的数据,如下所示:
<%= request.getAttribute("hello") %>
但如果用EL表达式的话,就可以写成下面的样子:
${hello }
说明一下:
el表达式的隐含对象为pageScope, requestScope, sessionScope, applicationScope
如果未指定scope,它的搜索顺序为:pageScope~applicationScope,当然我们可以显式的指定EL表达式的scope:
${requestScope.hello }
假设我们把一个user对象扔进request,user对象包含username, age等信息,我们怎么取出该对象的username和age信息呢:
${user.username }
${user.age }
注意:user对象应该提供getUserName()和getAge()方法,因为EL表达式其实是调用类似的方法来取得相应的内容。
现在假设后台是把一个map对象扔进了request里面,代码如下:
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
request.setAttribute("map", map);
那么如何在前台取得key1和key2对应的值呢?可以用下面的方法:
${map.key1 }
${map.key2 }
但是如果后台现在你不知道传回多少数据,需要遍历的话,EL表达式是完成不了的,这就需要配合JSTL表达式来完成,后面将会讲解
假设现在后台中是一个字符串数组:
String[] arr = {"a", "b", "c"};
request.setAttribute("arr", arr);
则前台是这样来获得第二个元素:
${arr[1] }
但如果是对象数组,例如是10个user对象的数组,我们现在来取得第二个user对象的姓名:
${arr[1].username }
如果是List容器,取法跟数组一样:
${arr[1].username }
EL表达式对运算符的支持:
假设要计算1+2 : ${1+2 }
便可
除法 : 10/5 : ${10/5 }
也可以写成 ${10 div 5 }
取余 : 10 % 3 : ${10%3 }
或者 ${10 mod 3 }
等于 : ${10==10 }
或者 ${10 eq 10 }
不等于 : ${10 != 10 }
或者 ${10 ne 10 }
小于 : ${8 < 10 }
或者 ${8 lt 10 }
大于 : ${8 > 10 }
或者 ${8 gt 10 }
小于等于 : <= | le
大于等于 : >= | ge
and : && | and
或 : || | or
非 : ! | not
对于取出来的数据是不是为空,可以用下面的函数:
${empty value }
对于不存在,或者你在request里面设置的null, 或者数组,字符串,list,map等容器的长度为0的情况下都会输出true,其他情况输出false