EL表达式
来源:互联网 发布:关键词价格查询源码 编辑:程序博客网 时间:2024/06/06 01:51
EL表达式
EL 全名为ExpressionLanguage。
EL主要作用
1.获取数据:
•EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
l使用EL表达式获取数据语法:“${标识符}”
lEL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回””(注意,不是null,而是空字符串)。
l示例:${user}
EL表达式也可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据,例如:
•${user.address.city}
•${user.list[0]}:访问有序集合某个位置的元素
•${map.key} : 获得map集合中指定key的值
结合JSTL的foreach标签,使用EL表达式也可以很轻松迭代各种类型的数组或集合,示例:
•迭代数组
•迭代collection类型集合
•迭代map类型集合
拿取导航中的数据:
<body> <% //pageContext.setAttribute("name", "张三丰"); //request.setAttribute("name", "张无忌");//session.setAttribute("name", "张翠山") ; application.setAttribute("name", "张果老") ; User user = new User(); user.setUsername("郭靖"); user.setAge(20); Friend f = new Friend(); f.setName("令狐冲"); Cat[] cs = new Cat[2]; cs[0] = new Cat("喵喵","白色"); cs[1] = new Cat("咪咪","黑色"); f.setCats(cs); user.setFriend(f); session.setAttribute("user", user); %> ${name } el表达式支持对象的导航:<br> 拿到郭靖的名字: ${user.username} ||${user["username"] }<br> 拿到郭靖的朋友的名字: ${user.friend.name } || ${user["friend"]["name"] }<br> 拿到郭靖的朋友的第一只猫的名字:${user.friend.cats[0].name } ||${user["friend"]["cats"][0]["name"] }<br> 拿到郭靖的朋友的第二只猫的颜色:${user.friend.cats[1].color } ||${user["friend"]["cats"][1]["color"] }<br> </body>
拿取集合中的数据:
<body> <% User user = new User() ; user.setUsername("郭靖") ; user.setAge(20) ; Friend f = new Friend() ; f.setName("令狐冲") ; Cat[] cs = new Cat[2] ; cs[0] = new Cat("喵喵","白色") ; cs[1] = new Cat("咪咪","黑色") ; f.setCats(cs) ; user.setFriend(f) ; //将数据放入某个域对象 session.setAttribute("user", user) ; List<String> list = new ArrayList<String>(); list.add("aaaaaaaaaaa"); list.add("bbbbbbbbbbb"); list.add("ccccccccccc"); list.add("ddddddddddd"); List<User> list1 = new ArrayList<User>(); list1.add(user); Map<String,User> map = new HashMap<String,User>(); map.put("a",user); request.setAttribute("list", list); request.setAttribute("map", map); request.setAttribute("list1", list1); %> 拿到list集合中的所有数据:${list } <br> 拿到list集合中的第一个数据:${list[0] } <br> 集合数据的导航:${list1[0].friend.cats[0].color }<br> <hr> 拿到map中的所有数据:${map }<br> 拿到map中的第一个值:${map["a"].friend.cats[1].color } </body>
2.执行运算:
•利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
empty运算符:检查对象是否为null或“空”,很好用!!!
三元表达式:${user!=null?user.name : “”} ,很好用!!!
[] 和 .号运算符
<body> 2.el表达式对运算符的支持<br> <% request.setAttribute("n", 10) ; List<String> list = new ArrayList<String>() ; list.add("aaaaaaa") ; request.setAttribute("list", list) ; User user = null ; request.setAttribute("user", user) ; %> <hr> 对一元运算符的支持:${-n }<br> 对二元运算符的支持:${3+4 } || ${n + 10} || ${n/4 } || ${5 / n }<br> 对比较运算符的支持: ${n>10 } || ${n gt 10} || ${n == 10 }<br> 对逻辑运算符的支持: ${n > 5 && n < 10 } || ${n > 5 and n < 10 }<br> 对 三元运算符的支持: ${n>5?"真的":"假的" } <br> 对empty运算符的支持: ${empty list } || ${not empty list } <br> 判断对象是否为null: ${empty user} || ${not empty user}<br> ${user } ${pageContext.request.contextPath } </body>
3.获取web开发常用对象
•EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
l语法:${隐式对象名称} :获得对象的引用
<body><%pageContext.setAttribute("name", "张三丰") ;request.setAttribute("name", "张无忌") ;session.setAttribute("name", "张翠山") ;application.setAttribute("name", "张果老");%> 默认按从小到大的范围去找:${name }<br> 直接从request范围中去拿数据:${requestScope.name }<br></body>
4.jsp:
<body><form action="${pageContext.request.contextPath }/5.jsp" method = "post">姓名:<input type = "text" name = "username" ><br>密码:<input type = "text" name = "pass" ><br>确认密码:<input type = "text" name = "pass" ><br><input type = "submit" value = "提交" ></form><a href = "${pageContext.request.contextPath }/5.jsp?name=mmm">5.jsp</a><%--<jsp:forward page="5.jsp?name=abc"><jsp:param value="30" name="age"/></jsp:forward>--%></body>
5.jsp:
<body><% request.setCharacterEncoding("UTF-8") ; %><!--通过param拿取从一个页面传递到另外一个页面的数据 --> 用el表达式的内置对象param获取表单的数据: ${param.username }||${param["username"] }<br> <hr> 用el表达式的内置对象param获取超链传递的数据: ${param.name }||${param["name"] }<br><hr> 用el表达式的内置对象param获取请求转发传递的数据: ${param.name }||${param["name"] } || ${param.age }||${param["age"] }<br><hr> 用el表达式的内置对象paramValues获取表单中同名控件的数据: ${paramValues.pass[0] } || ${paramValues.pass[1] } <br> <hr> 用el表达式的内置对象header获取请求头的数据: ${header["Accept-Encoding"] }<br> <hr> 用el表达式的内置对象headerValues获取请求头的数据: ${headerValues["Accept-Encoding"][0] }<br> <hr> 用el表达式的内置对象initParam获取全局配置的数据: ${initParam.name }<br> <!-- 在xml中配置全局参数<context-param> --> <hr> 用el表达式的内置对象Cookie(map类型)获取浏览器携带的Cookie(拿到的是map类型): ${cookie}<br> 用el表达式的内置对象Cookie获取正真的cookie对象 ${cookie.JSESSIONID}<br> 用el表达式的内置对象Cookie获取正真的cookie对象的名字: ${cookie.JSESSIONID.name}<br> 用el表达式的内置对象Cookie获取正真的cookie对象 的value属性的值: ${cookie.JSESSIONID.value}<br>
4.调用Java方法
•EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
EL表达式对字符串的操作只支持等与不等的操作:对于字符串的其他方法都不支持
<body><%request.setAttribute("s", "abc") ;%>${s == "abc" }</body>
自定义函数:
开发步骤:(和自定义标签步骤完全一样)
1、定义一个类,提供静态方法
package com.heima.function;public class Demo {//此方法和页面的upper方法对应public static String upper(String s){return s.toUpperCase() ;}}
2、在WEB-INF目录下建立一个扩展名为tld(Tag Libary Definetion)的xml文件。(注意:不能放在lib目录下)
可以到JavaEE5 Library----jstl-1.2.jar-----META-INF-------fn.tld里面复制再修改
<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.1</tlib-version> <short-name>fn</short-name> <uri>http://java.sun.com/myfunction</uri> <!--如果有多个tld文件,uri不能相同--> <function> <!-- name表示页面上函数的名字 --> <name>upper</name> <!-- 包名+类名 --> <function-class>com.heima.function.Demo</function-class> <!-- 返回值、参数: 包名+类名 除了返回的是八种基本数据类型可以不加包名--> <function-signature>java.lang.String upper(java.lang.String)</function-signature> </function> </taglib>
3、在jsp中使用
<body>4.el表达式支持自定义函数<br><hr>${"abcde"}${fun:upper("abc") }<!-- sun公司提供的标准的el函数 -->${fn:contains("abcde","abc") }</body>
执行过程:
sun公司提供的标准的EL函数:
1、jstl标签库:
core:核心
fmt:国际化
sql:数据库(不讲)
xml:操作xml(不讲)
functions:EL函数(EL调用普通类的静态方法)
2、拷贝jar包:由Apache实现的。
所有的java开发规范由JCP.org发布的,代号JSR--XXX.
JCP组织由:Oracle\Apache\Jboss等知名的开源组织组成的
jstl.jar
standard.jar
注意:用MyEclipse不用拷贝
3、使用EL函数,必须先导入
<%@tagliburi="http://java.sun.com/jsp/jstl/functions"prefix="fn"%>
0 0
- 【EL】EL表达式
- EL表达式
- EL表达式
- EL表达式
- EL表达式
- EL表达式
- EL表达式
- EL表达式
- EL表达式
- el表达式
- EL表达式
- EL表达式
- EL表达式
- el表达式
- el 表达式
- EL表达式
- EL表达式
- EL表达式
- 关于“无状态的HTTP连接提供有状态的连接
- iwconfig: command not found 解决方案
- Android程序签名打包
- 更好的 SQL 模式的 10 条规则
- mongodb安装
- EL表达式
- 页面跳转传值,两个页面跳转cookie传值。
- hadoop-2.5.2完全分布式搭建centos6.5下
- Hibernate中inverse的用法
- Java 8.0 Lambda解析
- 【Qt编程】基于QWT的曲线绘制及图例显示操作
- BZOJ4723 [POI2017]Flappy Bird
- C语言:结构体中一级指针和二级指针的创建与释放示例
- matlab中界面菜单(uimenu)