EL表达式学习笔记

如果你将一个字符串放进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

发布了74 篇原创文章 · 获赞 3 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章