java学习笔记—EL表达式(38)

王朝学院·作者佚名  2016-05-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

java学习笔记—EL表达式(38)EL表达式EL即ExPRession Language,主要的任务是帮助开发者简化获取域属性。

但是一般情况下需要使用EL和JSTL结合使用。

语法:

${

// 隐含对象|直接写域中的属性

}

? 算术运算<!-- 算术运算 --> 20+10 = ${ 20+10 } <br/> 20-10 = ${ 20-10 } <br/> 20*10 = ${ 20*10 } <br/> 20/10 = ${ 20/10 } <br/> 20%10 = ${ 20%10 } <br/>

? 比较运算 <!-- 比较运算 --> 20 > 10 = ${ 20 > 10 } <br/> 20 < 10 = ${ 20 < 10 } <br/> 20 >= 10 = ${ 20 >= 10 } <br/> 10 == 10 = ${ 10 == 10 } <br/> ${ str == null }

? 三目运算符${ name != null ? "欢迎":"注册"}

? 逻辑运算${ 12>10 && 1<2 }<br/>

一 获取域对象(重点)

1. 普通数据

<!-- 获取普通属性 --> <% request.setAttribute("name","jack"); %> ${name}<br/>

以上的代码在获取域属性的时候没有指定给任何的域空间,那么底层一定按照小到大的方式逐一的检测的域属性。

pageContext.findAttribute(“”); à 实现原理

2 获取数组属性

<!-- 获取数组属性 --> <% int [] ins = {1,2,3,4}; request.setAttribute("arrs",ins); %> ${arrs}<br/> ${arrs[2]}<br/> ${arrs["2"]}<br/> ? 该方式不是给数组用,是个集合使用。

3 List集合

<!-- 获取数组属性 --> <% List<String> list = new ArrayList<String>(); list.add(0,"jiao"); list.add(1,"ning"); list.add(2,"bo"); request.setAttribute("list",list); %> ${list }<br/> ${list[0] }<br/> ${list["0"] }<br/>

4 获取Map属性

<% LinkedHashMap<String,String> map = new LinkedHashMap<String,String>(); map.put("001","ooooo"); map.put("002","fffff"); map.put("003","uuuuu"); request.setAttribute("map",map); %> ${map }<br/> ${map[001] }<br/> ${map["001"] }<br/> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <c:forEach items="${map}" var="entry"> ${entry.key } = ${entry.value }<br/> </c:forEach>

6 Bean操作

<!-- 获取Map中Bean属性 --> <% LinkedHashMap<String,Cat> cats = new LinkedHashMap<String,Cat>(); cats.put("001",new Cat("A猫",3,"波斯猫")); cats.put("002",new Cat("B猫",3,"狸猫")); cats.put("003",new Cat("C猫",3,"加菲猫")); request.setAttribute("cats",cats); %> <c:forEach items="${cats}" var="entry"> ${entry.key} = ${entry.value.name } , ${entry.value.age },${entry.value.type }<br/> </c:forEach>

7 EL隐含对象

pageScope

requestScope

sessionScope

applicationScope

如果在获取域属性的时候没有指定具体的域,那么逐一的查找比较耗时,因此希望大家在明确域名的时候一定要指定域名。

pageContext 该对象可以获取request对象

举例:

<!-- 隐含对象 --> ${pageContext.request.method }<br/> ${pageContext.request.servletPath }<br/> ${pageContext.request.contextPath }<br/> ${pageContext.request.protocol }<br/>获取请求参数paramparamValues举例:${param.name }<br/>${paramValues.likes[0] }<br/>获取请求头信息headerheaderValues举例:${header["accept"] }<br/>initParam获取Cookiecookie举例:${cookie }<br/>${cookie.address }<br/>${cookie.address.name }<br/>${cookie.address.value }<br/>

EL和函数库问题:在数据显示的时候经常需要调用一些方法对需要显示的数据进行基本的处理,如:

数据过滤、求子串等操作。那么就需要使用EL表达式进行快速的函数调用。

引入HTMLFilter.java类描述为函数2.1 在WEB-INF中创建一个myfun.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.0</tlib-version> <short-name>jnb</short-name> <function> <name>filter</name> <function-class>cn.itcast.utils.HTMLFilter</function-class> <function-signature>java.lang.String filter(java.lang.String)</function-signature> </function></taglib>

2.2 引入函数库

%@taglib uri="/WEB-INF/myfuns.tld" prefix="jnb"%

1.2 使用EL调用函数

<td>${jnb:filter(entry.value.info)}</td>

注意:

EL表达式中不能继续嵌套EL表达式定义函数的时候函数必须是静态的。总结JSTL总过有5个库,但是由于JSP主要是做数据显示的,因此我们只学习核心库和函数库。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航