EL表达式

EL即Expression Language,主要的任务是帮助开发者简化获取域属性。

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

语法:

${

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

}

    算术运算
<!-- 算术运算 -->
+ = ${ + } <br/>
- = ${ - } <br/>
* = ${ * } <br/>
/ = ${ / } <br/>
% = ${ % } <br/>
    比较运算
<!-- 比较运算 -->
> = ${ > } <br/>
< = ${ < } <br/>
>= = ${ >= } <br/>
== = ${ == } <br/>
${ str == null }
    三目运算符
${ name != null ? "欢迎":"注册"}
    逻辑运算
${ > && < }<br/>

一  获取域对象(重点)

1. 普通数据

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

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

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

2 获取数组属性

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

3  List集合

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

4  获取Map属性

<%
LinkedHashMap<String,String> map = new LinkedHashMap<String,String>();
map.put("","ooooo");
map.put("","fffff");
map.put("","uuuuu");
request.setAttribute("map",map);
%>
${map }<br/>
${map[] }<br/>
${map[""] }<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("",new Cat("A猫",,"波斯猫"));
cats.put("",new Cat("B猫",,"狸猫"));
cats.put("",new Cat("C猫",,"加菲猫")); 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/> 获取请求参数
param
paramValues
举例:
${param.name }<br/>
${paramValues.likes[] }<br/> 获取请求头信息
header
headerValues
举例:
${header["accept"] }<br/>
initParam
获取Cookie
cookie
举例:
${cookie }<br/>
${cookie.address }<br/>
${cookie.address.name }<br/>
${cookie.address.value }<br/>

EL和函数库

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

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

  1. 引入HTMLFilter.java类
  2. 描述为函数

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>

注意:

  1. EL表达式中不能继续嵌套EL表达式
  2. 定义函数的时候函数必须是静态的。

总结

JSTL总过有5个库,但是由于JSP主要是做数据显示的,因此我们只学习核心库和函数库。

java学习笔记—EL表达式(38)的更多相关文章

  1. 重温JSP学习笔记--El表达式

    el表达式是jsp内置的表达式语言,jsp从jsp2.0开始,就不再提倡使用java脚本,而是用el表达式和动态标签来替代,而el表达式主要替代的是jsp中的<%=....%>,也就是说e ...

  2. Javaweb学习笔记——EL表达式

    一.前言 EL表达式是什么? 简而言之,可以这样理解,EL表达式全名为:Exprexxsion Language,原先是JSTL 1.0为了方便存取数据而定义的语言,到了JSTL 2.0便正式成为标准 ...

  3. Java学习笔记-Lambda表达式

    Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数是接口)的实例 意义 自从Java 8开始,Java支持Lambda表达 ...

  4. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  5. java学习笔记06--正则表达式

    java学习笔记06--正则表达式 正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证.拆分.替换等操作. 例如:现在要去判断一个字符串是否由数字组成,则可以有以下的两种做法 不使用正则 ...

  6. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  7. 20145330第五周《Java学习笔记》

    20145330第五周<Java学习笔记> 这一周又是紧张的一周. 语法与继承架构 Java中所有错误都会打包为对象可以尝试try.catch代表错误的对象后做一些处理. 使用try.ca ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. 20145330第九周《Java学习笔记》

    20145330第九周<Java学习笔记> 第十六章 整合数据库 JDBC入门 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JD ...

随机推荐

  1. 100 道 Linux 笔试题

    1. cron 后台常驻程序 (daemon) 用于: A. 负责文件在网络中的共享 B. 管理打印子系统C. 跟踪管理系统信息和错误 D. 管理系统日常任务的调度 2. 在大多数Linux发行版本中 ...

  2. oracle ora-01652无法通过128(在表空间xxx中)扩展 问题解决方式

    问题原因建立的表空间dbf文件大小上限了 一. select * from dba_data_files 使用该条语句可以查看当前库中有多少表空间并且DBF文件的存储位置 二.查看表空间是否开启了自动 ...

  3. 【317】python 指定浏览器打开网页 / 文件

    一.python 打开浏览器的方法: 1. startfile方法(打开指定浏览器) import os os.startfile("C:\Program Files\internet ex ...

  4. kubernetes 示例 hello world

    本文所说的Hello world是一个web留言板应用,并且是基于PHP+Redis的两层分布式架构的web应用,前端PHP web网站通过访问后端Redis数据库完成用户留言的查询和添加功能,具备读 ...

  5. js高级——构造函数,实例对象和原型对象——prototype、__proto__和constructor构造器

    一.前言 了解JavaScript面向对象,需要先了解三个名词: 构造函数,实例对象和原型对象. 注意:JavaScript中没有类(class)的概念,取而代之的是构造函数,两者类似却又有很大的差别 ...

  6. Qt Customize QVariant

    Customize QVariant #include <QCoreApplication> #include <QVariant> #include <QDebug&g ...

  7. 利率计算v2.0--web版--软件工程

    .客户说:帮我开发一个复利计算软件. .如果按照单利计算,本息又是多少呢? .假如30年之后要筹措到300万元的养老金,平均的年回报率是3%,那么,现在必须投入的本金是多少呢? .利率这么低,复利计算 ...

  8. 基于Web Service的客户端框架搭建二:数据转换层(FCL)

    引言 要使用WebService来分离客户端与服务端,必定要使用约定好两者之间的数据契约.Json数据以其完全独立于语言的优势,成为开发者的首选.C# JavaScriptSerializer为Jso ...

  9. linux平台使用spark-submit以cluster模式提交spark应用到standalone集群

    shell脚本如下 sparkHome=/home/spark/spark-2.2.0-bin-hadoop2.7 $sparkHome/bin/spark-submit \ --class stre ...

  10. Selenium Webdriver定位元素的几种方式

    原文:http://www.cnblogs.com/tobecrazy/p/4570494.html 工作中使用到记录一下. 主要有: 上传 alter dialog prompt dialog co ...