EL表达式

来源:互联网 发布:关键词价格查询源码 编辑:程序博客网 时间:2024/06/06 01:51

EL表达式

EL 全名为ExpressionLanguage。

EL主要作用

1.获取数据:

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
l使用EL表达式获取数据语法:“${标识符}”
lEL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从pagerequestsessionapplication四个域中查找相应的对象,找到则返回相应对象,找不到则返回””(注意,不是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语法:${隐式对象名称:获得对象的引用

获取工程路径:${pageContext.request.contextPath }

<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
原创粉丝点击