您的位置:首页 > 其它

EL表达式

2016-04-20 17:51 295 查看
EL表达式是JSP 2.0(JavaEE1.4)规范中的一门技术 。因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0技术的WEB服务器。

注意:有些Tomcat服务器如不能使用EL表达式
(1)升级成tomcat6
(2)在JSP中加入<%@ page isELIgnored="false" %>

最初出现的目的是用来取代jsp页面中的jsp脚本表达式.但是随着el的发展el的功能已经不限于此了。
${el表达式}
(1)获取数据:不能设置值
使用中括号的地方都可以使用点号替代,除了中括号中是数字或者中括号中包含特殊字符(- . )的情况除外。在中括号中如果不用双引号引起来则是变量,先找变量的值,再拿变量的值使用。如果用双引号则是常量,直接使用常量。1、获取常量字符串/数字/布尔类型,直接写在el表达式中,el直接进行输出2、获取域中的变量如果el中写的是一个变量的名,则el会调用pageContext的findAttribute方法,在四大作用域中以给定的名字找对应的属性值,找到后进行输出,如果四个域中都找不到,什么都不输出3、获取数组中的数据4、获取集合中的数据5、获取Map中的数据6、获取javabean的属性
<h1>获取javabean的属性</h1><hr>
<%
Person p = new Person();
p.setName("芙蓉姐姐");
p.setAge(17);
pageContext.setAttribute("p",p);
%>
${p.name }${p.age }   //p.getName()  p.getAge()
<img src="${pageContext.request.contextPath }/1.jpg"/>
//pageContext.getRequest().getContextPath()

<h1>获取Map中的数据</h1><hr>
<%
Map<String,String> map = new HashMap();
map.put("name","奥巴马");
map.put("age","17");
map.put("gender","男");
map.put("addr","白宫");
map.put("name.xiao","小黑黑");
pageContext.setAttribute("map",map);
pageContext.setAttribute("name","age");
%>
${map"name" }  ${map"addr" }
${map.gender }   ${map.age }  //使用中括号的地方,可以使用点号替代
${map"name.xiao" }  //包含特殊字符(- . ),只能用
${mapname }  //= ${map“age” },pageContext.findAttribute(name)=”age”

<h1>获取集合中的数据</h1><hr>
<%
List<String> list = new ArrayList<String>();
list.add("甄嬛");
list.add("安玲荣");
list.add("凤姐");
pageContext.setAttribute("L",list);
%>
${L0 }   //中括号中是数字,只能使用

<h1>获取数组数据</h1><hr>
<%
String  names = {"容嬷嬷","紫薇","金锁","小燕子"};
pageContext.setAttribute("names",names);
%>
${names2}

<h1>获取域中的变量数据</h1><hr>
<%
String name = "灭绝师太";
pageContext.setAttribute("name",name);
%>
${name }

<h1>获取常量数据</h1><hr>
${"哈哈哈" }  ${199 }  ${true } //字符串/数字/布尔类型,页面直接显示

EL_执行运算_获取常用开发对象

(2)执行运算:
算数运算 +-*/逻辑运算 && || ! and , or , not比较运算 == eq > gt>= ge < lt <= le != ne三元运算符 10>9? "yes" : "no"empty运算符
<h1>empty 运算符 : 判断一个对象是否为null或字符串是否为空,字符串或集合内容是否为空或域中是否没有任何属性</h1><hr>
<%
String str = "";
pageContext.setAttribute("str",str);
List list = new ArrayList();
pageContext.setAttribute("list",list);
%>
${empty str }   //true 字符串为空
${empty list}   //true 集合内容为空
${empty pageScope }  //false

<h1>三元运算</h1><hr>
${10>9? "yes" : "no" }

<h1>逻辑运算</h1><hr>
${not (3>2 and 1<2 or 10>3) }
<h1>比较运算</h1><hr>
${1 eq 1 } ${3 ge 2 } ${5+3 lt 3 }
<h1>算术运算:如果有非数字参与算数运算,el表达式会试图将非数字转换为数字后参与运算</h1><hr>
${1+1 }
${1-2 }
${1+"2" }
${1+”a”}  //字符串a 不能转换未数字,服务器报错

(3)获取常用开发对象:
el中内置了11个内置对象,这些对象el内置的,不需要提前定义就可以直接在el中使用 1*pageContext -- 有了它可以很方便的获取jsp页面中的9大隐式对象2、*pageScope -- page域中属性组成的Map*requestScope -- request域中属性组成的Map*sessionScope -- session域中属性组成的Map*applicationScope --application域中属性组成的Map3、*param -- 所有请求参数组成的Map<String,String>paramValues -- 所有请求参数的Map<String,String[]>对象,它对于某个请求参数,返回的是一个string[] 4、header -- 所有请求头组成的Map<String,String>headerValues -- 所有请求头组成的Map<String,String[]>5、*cookie -- 所有cookie信息组成的Map<String,Cookie>6、initParam -- 所有web应用的初始化参数组成Map
<%
pageContext.setAttribute("name","wang");
request.setAttribute("name","li");
%>
${requestScope.name}
${param.name } ${paramValues.like2 }
${header"Accept-Language" }
${cookie.JSESSIONID.name }  ${cookie.JSESSIONID.value }
${initParam.name2 }

EL_获取常用开发对象_调用java方法

(4)使用EL调用Java方法
EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。
示例:${prefix:method(params)}
在EL表达式中调用的只能是Java类的静态方法。
这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。
EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。

调用方法的过程3步骤:
1、写一个类其中包含要被el调用的方法,这个方法必须是静态的方法2、写一个tld文件在其中对要被调用的静态方法进行一下描述 (myeclipse导入的schemal地址有问题)3、在jsp页面中taglib指令将tld文件引入当前jsp页面,从而在jsp页面中就可以调用描述好的方法

编写完标签库描述文件后,需要将它放置到<web应用>\WEB-INF目录中或WEB-INF目录下的除了classes和lib目录之外的任意子目录中。
TLD文件中的<uri> 元素用指定该TLD文件的URI,在JSP文件中需要通过这个URI来引入该标签库描述文件。
<function>元素用于描述一个EL自定义函数,其中:
<name>子元素用于指定EL自定义函数的名称。
<function-class>子元素用于指定完整的Java类名,
<function-signature>子元素用于指定Java类中的静态方法的签名,方法签名必须指明方法的返回值类型及各个参数的类型,各个参数之间用逗号分隔。

JSTL中的常用EL函数 由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用。 这些EL函数在JSTL开发包中进行描述,因此在JSP页面中使用SUN公司的EL函数库,需要导入JSTL开发包,并在页面中导入EL函数库,如下所示: 在页面中使用JSTL定义的EL函数: <%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
不需要大家自己会写调用方法的过程,只要会调用别人写好的标签库就可以了——fn标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
${fn:toUpperCase("asdfasdfKJKJKJdsagHIHidsfgGUGu") }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: