详解el表达式
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) }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: JSP取header信息
- 下一篇: Qt全局宏和变量