详解el表达式

来源:互联网 发布:手机淘宝怎么小二介入 编辑:程序博客网 时间:2024/06/07 15:48
EL表达式


设计目的:Expression Language,即表达式语言,为了使Jsp写起来更加快速和便捷,简化Jsp的代码

实现功能:1)访问存储在域中的数据

                  2)简化输出代码

                  3)可以做简单的运算

EL表达式特色:1)既可以使用算术表达式,也可以使用逻辑表达式

                          2)表达式中可以使用整型,浮点,字符串,常量,null等

一、用EL表达式做普通输出

<%String user="andy";request.setAttribute("user", user);request.setAttribute("user", u1);%> user= ${user }u=<%=u %>


二、用EL表达式访问Javabean的属性

定义一个User类
public class User {private String name;//User类的name属性private int age;    //User类的age属性public User(){}   //无参构造public User(String name, int age) {//有参构造函数super();this.name = name;this.age = age;}public void setName(String name) { //set和get方法this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + "]";}}


<%User u1=new User();u1.setName("andy");u1.setAge(30);request.setAttribute("user", u1);%>
//Jsp的输出user:<%=u1 %><br/> 
//用EL表达式输出user:${user}利用el表达式访问javabean的属性<br/>${ user.name }<br/>
${ user.age }<br/>
//这种方式和.是一样的,都可以拿到user的属性值${ user["name"] }


三、EL表达式操作数组和集合

<%@ page language="java" contentType="text/html; charset=gb2312"    pageEncoding="gb2312"    import="com.gec.User"
//记得这里要引包哟    import="java.util.*"%><%
<!-- 这里是创建list集合-->List<String> list=new ArrayList<String>();list.add("andy");list.add("candy");request.setAttribute("list", list);List<User> list2 = new ArrayList<User>();list2.add( new User("andy",12) );list2.add( new User("candy",13) );request.setAttribute( "list2", list2 ); Map<String,User> map=new HashMap<String,User>();map.put("andy", new User("andy",20));map.put("jakson", new User("jakson",21));request.setAttribute("map", map);
<!--创建数组-->String [] arr={"A","B","C"};request.setAttribute("ary", ar);%>list = ${ list }<br/>
[0] = ${ list['0'] }<br/>[1] = ${ list['1'] }<br/>[0].name = ${ list2['0'].name }[0].age  = ${ list2['0'].age }<br/>${ map.andy.name }${map['jakson'].age}  ${ary[0] }${ary['1'] }${ary['2'] }

四、算术运算符和逻辑运算符

算术运算符:

1)+,-,*,/或div

2)==或eq      判断是否相等

3)!=或ne    判断是否不等

4)<或lt          判断是否小于

5)>或gt         判断是否大于

6)<=或le       判断是否小于等于

7)>=或ge      判断是否大于等于

${1+1}<br/>${3-1}<br/>${4 div 4}<br/>${4*4}<br/><!-- ==是否相等  gt:>,ge:>=,le:<=,lt:<${3==2}<br/>${3 eq 2}<br/>


逻辑运算符:

1)&&或and       测试逻辑与

2)||或or             测试逻辑或

3)!或not          测试取反

4)empty            测试是否空值,${empty aa}   

       

${a>3&&a<6}<br/>a为空:${empty a}<br/><!--三目运算符  -->${a>5 ?'早上':'下午' }


五、获取地址栏上参数的值以及获取服务器的根路径

//http://localhost:8089/JapTest2/el_test3/Test1.jsp?user=andy

<!-- 获取地址栏上的参数的值 -->${param['user'] }<br/> ${param['pass'] }<br/> <!-- 获取服务器的根路径 -->${pageContext.servletContext.contextPath }<br/>${ pageCotext.reuest.remoteHost}<br/>${pageContext.request.remotePort }<br/>${pageContext.request.requestURI }<br/>



六、获取指定域的参数

<%pageContext.setAttribute("user", "andy",PageContext.REQUEST_SCOPE);%><!-- 相当于pageContext.findAttribute() -->${user}<br/><!-- 获取指定区域的参数 -->pageScop:${pageScope['user']}<br/>requestScope:${requestScope['user']}<br/>sessionScope:${sessionScope['user']}<br/>applicationScope:${applicationScope['user']}<br/>



七、获取多个同名的地址栏参数的值

<!-- el的内置对象 ,取地址栏上的参数   http://localhost:8089/JapTest2/el_test3/Test1.jsp?user=andy--><%//获取多个同名的地址栏参数方法://http://localhost/JspTest2/el_test3/Test2.jsp?like=1&like=2&like=4%>${ paramValues.like[0] }<br/>${ paramValues.like[1] }<br/>${ paramValues.like[2] }<br/>



八、EL自定义函数

1)编写java类的静态方法。

package com.gec;//Java类的静态方法public class ElTest {public static Integer getMax(Integer a,Integer b){return (a>b)?a:b;}}

2)在TLD文件中配置EL自定义函数。

<?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.0</tlib-version><short-name>elf</short-name><uri>http://wwww.gec.cn/tld</uri><function><name>getMax</name><function-class>com.gec.ElTest</function-class><function-signature>java.lang.Integer getMax(java.lang.Integer,java.lang.Integer)</function-signature></function></taglib>



3)在jsp页面中通过tablib指令引用定义EL自定义函数的TLD文件。

<jsp-config> <taglib> <taglib-uri>http://wwww.gec.cn/tld</taglib-uri> <taglib-location>/WEB-INF/tld/sy.tld</taglib-location> </taglib> </jsp-config>





4)使用EL自定义函数。

<%@ page language="java" contentType="text/html; charset=gb2312"    pageEncoding="gb2312"    import="com.gec.User"%>    <!-- 叹号这种做法只能用在你当前的jsp -->    <!--  <%!private int getMax(int a,int b){return 0;}%><%getMax(1,2); %>--><!-- 现在我们用自定义el函数 --><%@ taglib uri="http://wwww.gec.cn/tld"  prefix="elf"%>${ elf:getMax(10,15) }










1 0
原创粉丝点击