牛骨文教育服务平台(让学习变的简单)
博文笔记

详解el表达式

创建时间:2017-04-26 投稿人: 浏览次数:233
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;
	}
	@Override
	public 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) }








 
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。