EL表达式语法介绍
el语句基本用法

el语句基本⽤法EL(Expression Language)⼀、EL操作符语法:${EL表达式}11. “.”操作符⽤来访问对象的某个属性,如${}。
2. “[ ]”操作符也可⽤来访问对象的某个属性,如${user[‘name’]}。
“[ ]”操作符其他功能:(1)当属性名中包含特殊字符如“.”或“-”等的情况下,就不能使⽤“.”操作符来访问,这时只能使⽤“[ ]”操作符。
(2)根据索引值访问数组中的元素使⽤“[ ]”操作符,如${arr[1]}。
(3)使⽤变量实现动态访问,如${user[x]},x是⼀个变量,改变x即可。
1.1、算术操作符这⾥只测试了“+”操作符,“-”、“*”、“/”或div、“%”或mod请⾃⾏测试。
<!-- “+”操作符 -->${a1+a2+a3 }<br><!-- 输出:60 -->${1+1 }<br><!-- 输出:2 -->${'1'+1.1 }<br><!-- 输出:2.1 -->${"1"+1 }<br><!-- 输出:2 -->${bbbbbsdcksnvjnds+1 }<br><!-- 输出:1 -->\${"bbbbbsdcksnvjnds"+1 }<!-- 报异常 -->1.2、关系操作符1.3、逻辑操作符1.4、empty操作符<!-- empty操作符 -->${empty s }<br><!-- 输出:true -->${!empty s }<br><!-- 输出:false -->${not empty s }<br><!-- 输出:false -->${!not empty s }<br><!-- 输出:true -->总结:若变量 s为null,或长度为零的String,或size为零的集合,则${ empty s }返回的结果为true,${ not empty s }或${ ! empty s }返回的结果为false。
EL表达式

EL表达式总结EL表达式总是用大括号括起,而且前面有一个美元符($)前缀:${expression}。
表示式中第一个命名变量要么式一个隐式对象,要么是某个作用域(页面作用域、请求作用域、会话作用域或应用作用域)中的一个属性。
点号操作符允许你使用一个Map键或一个bean性质名来访问值,例如,使用${foo.bar}可以得到bar的值,在此,bar是Map foo的Map键名,或者是bean foo的一个性质。
放在点号操作符右边的东西必须遵循Java的标识符命名规则!(换句话说,必须以一个字母、下划线或美元符开头,第一个字符后面可以有数字,但不能有其他字符)。
点号右边只能放合法的Java标识符。
例如,${foo.1}键就不可以。
[]操作符比点号功能更强大,因为利用[]可以访问数组和List,可以把包含命名变量的表达式放在中括号里,而且可以做任意层次的嵌套,只要你受得了。
例如,如果musicList是一个ArrayList,可以用${musicList[0]}或${musicList[“0”]}来访问列表的第一个值。
EL并不关心列表索引加不加引号。
如果中括号里的内容没有用引号引起来,容器就会进行计算。
如果确实放在引号里,而且不是一个数组或List的索引,容器就会把它看作是性质或键的直接命名。
除了一个EL隐式对象(PageContext)外,其他EL隐式对象都是Map。
从这些隐式对象可以得到任意4个作用域中的属性、请求参数值、首部值、 cookie值和上下文初始化参数。
非映射的隐式对象是pageContext,它是PageContext对象的一个引用。
不要把隐式EL作用域对象(属性的Map)与属性所绑定的对象混为一谈。
换句话说,不要把requestScope隐式对象与具体的JSP隐式对象 request混淆。
访问请求对象只有一条路,这就是通过pageContext隐式对象来访问(不过,想从请求得到的一些东西通过其他EL隐式对象也可以得到,包括param/paramValues、header/headerValues和cookie)。
EL表达式详解

EL表达式详解EL表达式1、EL简介1)语法结构${expression}2)[ ]与.运算符EL 提供.和[]两种运算符来存取数据。
当要存取的属性名称中包含⼀些特殊字符,如.或?等并⾮字母或数字的符号,就⼀定要使⽤ []。
例如:${user.My-Name}应当改为${user["My-Name"] }如果要动态取值时,就可以⽤[]来做,⽽.⽆法做到动态取值。
例如:${er[data]} //date 变量3)变量1. EL存取变量数据的⽅法很简单,例如:${username}。
因为我们并没有指定哪⼀个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
2. 假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
3. 属性范围在EL中的名称Page PageScopeRequest RequestScopeSession SessionScopeApplication ApplicationScope4) 适⽤范围和作⽤域1. EL表达式⽤${ }表⽰,可⽤在所有的HTML和JSP标签中作⽤是代替JSP页⾯中复杂的JAVA代码.2. EL表达式可操作常量变量和隐式对象. 最常⽤的隐式对象有${param}和${paramValues}.${param}表⽰返回请求参数中单个字符串的值. ${paramValues}表⽰返回请求参数的⼀组值.pageScope表⽰页⾯范围的变量值.requestScope表⽰请求对象的变量值. sessionScope表⽰会话范围内的变量值.applicationScope表⽰应⽤范围的变量.3. --<%@ page isELIgnored="true"%> 表⽰是否禁⽤EL语⾔,TRUE表⽰禁⽌.FALSE表⽰不禁⽌.JSP2.0中默认的启⽤EL语⾔.4. -- EL语⾔可显⽰逻辑表达式如${true and false}结果是false 关系表达式如${5>6} 结果是false 算术表达式如 ${5+5} 结果是102、EL隐含对象1)与范围有关的隐含对象与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和 applicationScope;它们基本上就和JSP的pageContext、request、session和application⼀样;在EL中,这四个隐含对象只能⽤来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。
表达式语言(el)的语法格式

表达式语言(Expression Language)是一种用于在软件应用中进行数学计算和逻辑判断的特殊语言。
它通常用于在动态网页、模板、配置文件和其他与业务逻辑相关的场景中进行数据处理和计算。
EL的语法格式包括以下几个方面:1. 表达式结构:EL表达式通常由一系列的变量、运算符和函数组合而成,用于对数据进行操作和计算。
它的结构通常由一组操作数和运算符组成,比如 x + y 或者 func(x, y) 等形式。
2. 变量引用:在EL中,可以通过使用 ${} 符号来引用变量,变量的引用形式为 ${var},其中 var 为变量名。
这种形式的引用可以方便地将变量的值嵌入到文本中,或者作为计算表达式的一部分参与运算。
3. 字面量:除了引用变量,EL中还可以直接使用字面量,包括整数、浮点数、字符串等。
比如 123、3.14、"hello" 等都可以作为字面量直接出现在表达式中。
4. 运算符:EL支持多种常见的数学和逻辑运算符,包括加减乘除、取模、逻辑与或非等。
这些运算符可以用于对变量和字面量进行计算和逻辑判断,从而完成复杂的数据处理和逻辑控制。
5. 函数调用:除了基本的运算符,EL还支持函数的调用,这些函数可以是预定义的一些常用函数,也可以是用户自定义的函数。
通过函数调用,可以实现更复杂的数据处理和逻辑控制。
EL的语法格式简洁清晰,易于理解和使用。
它在软件开发中发挥着重要的作用,不仅可以用于动态网页的数据展示和计算,还可以用于配置文件的数据处理和逻辑判断。
了解和掌握EL的语法格式对于提高软件开发效率和质量都具有重要意义。
EL语言的语法格式设计简洁清晰,易于理解和使用,但在实际应用中,我们还需要更深入地了解其具体的语法规则和用法。
下面我们将对EL表达式的语法格式进行更详细的介绍,包括变量引用、字面量、运算符、函数调用等方面的内容。
1. 变量引用在EL语法中,变量引用是一种非常常见的操作。
el表达式使用之类switch语句

el表达式使用之类switch语句el表达式主要用于JavaWeb开发中的JSP页面中,用于在页面上动态展示数据。
在el表达式中,可以使用类似于switch语句的功能来实现多条件判断。
本文将以el表达式使用之类switch语句为主题,进行详细的解释。
一、el表达式简介1. el表达式是什么?el表达式是一种用于在JSP页面中动态访问数据的语法标记,它可以在JSP页面中直接引用Java代码中的变量和对象,并将其显示在页面上。
2. el表达式的语法规则el表达式的基本语法是{表达式},其中表达式可以是变量、属性、方法等。
二、el表达式的使用1. 引入el表达式的方式要在JSP页面中使用el表达式,需要在页面中引入el表达式的标准库。
可以通过在JSP页面的头部引入如下代码:jsp<%@ page language="java" contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib prefix="c" uri=" %>引入标准库后,就可以开始使用el表达式了。
2. el表达式中的变量使用el表达式可以直接访问Java中的变量。
比如,有一个名为name的String 型变量,在JSP页面中可以通过{name}来展示其值。
3. el表达式中的属性使用el表达式可以直接访问Java对象的属性。
比如,有一个名为person的Person对象,包含name和age两个属性,在JSP页面中可以通过{}和{person.age}来展示其属性值。
4. el表达式中的方法使用el表达式可以直接调用Java对象的方法。
比如,有一个名为person的Person对象,包含一个getName()方法,在JSP页面中可以通过{person.getName()}来展示其返回值。
EL表达式语法详细介绍

1.1 EL表达式:EL表达式规定为:eval-expression和literal-expression,同时E L表达式支持Compositeexpressions,很多EL表达式(eval-ex pressions和literal-expressions)被聚合在一起。
EL表达式被解析成数值表达式和方法表达式。
其中,取值表达式去引用一个值,而方法表达式则是关联一个方法。
一旦被解析之后,表达式能够被优化地计算一次或多次。
下面我们来分为:eval-expression、literal-expression、Compo siteexpressions来讲述1.1.1Eval-expressionEval-expression是以使用${expr}或者#{expr}结构的形式构成。
两种方式都是相同的方式,能很好被解析和计算,尽管它们在使用时有着不同的意义从技术方面来说。
从J2EE层规范协定来说,${expr}结构是直接计算而#{expr}结构则是延期计算,这种界定符号指出了在J2EE层两种表达式类型的语义上面的区别。
#{expr}这种界定符号被称为延迟计算是因为直到系统需要的时候才计算。
而${expr}这种界定符号则是在JSP页面编译的时候就计算,就是为什么叫做直接计算的原因。
1.1.1.1作为取值表达式的计算表达式当解析成一个取值表达式的时候,eval-expression能被计算成左值和右值。
若在EL中有等号操作符号出现,右值是类型出现在等号的右边的表达式,左值同理。
右值比如:<input type="text"value="${}"/><h:form>以下面这个例子为例:<h:inputTextid="email"value="#{checkOutFormBean.email}"size="25"maxlength="125"validator="#{checkOutFormBean.validateEmail}"/></h:form>当表单被提交的时候,在申请计算的阶段,Faces计算EL表达式#{checkOutFormBean.validateEmail}作为一个数据接口的引用,这个数据结构的数值是被一个表单相关联的输入参数设置。
el 表达式

el 表达式EL表达式,即Expression Language Expression,在Java企业开发中是一种非常常见的表达式语言。
EL表达式是一种在JSP页面中使用变量和运算符来获取值的表达式语言,它提供了一种简单和易于使用的方式来操作和展示数据。
EL表达式的出现,使我们可以直接在JSP中使用Java 的变量,而无需编写复杂的Java代码。
使用EL表达式,我们可以很方便的获取Session,Application中的变量值,也可以访问对象属性,字符串、数字等常量,可以进行逻辑运算和算术计算等等。
语法规则EL表达式的语法规则非常简单,就像正则表达式一样。
它由以下三个元素组成:1. 表达式语言的引用符: $、#、@等。
2. EL表达式的变量或名称。
3. 变量或名称之后的操作符或方法名。
下面是一个EL表达式的语法定义举例:${VariableName.propertyName['key'].methodName() }其中,${}是EL表达式的引用符。
VariableName表示EL表达式的变量或对象的名称,propertyName表示对象的属性名称,['key']表示Map对象的key的名称,methodName表示对象的方法名。
变量名称和属性名可以是Java有效的属性名称,也可以使用字符、数字和下划线组成的合法Java变量名称。
EL 表达式还支持一些运算符和函数,如算术运算符、逻辑运算符、比较运算符和常用的函数,例如获取当前日期、格式化日期等。
常用的EL表达式运算符EL表达式支持的运算符非常的丰富,下面列出了一些常用的运算符:1. 算术运算符:+,-,*,/,%。
2. 关系运算符:<,>,<=,>=,==,!=。
3. 逻辑运算符:&&,||,!。
4. 条件运算符:?:。
5. 空运算符:empty。
6. 正则表达式运算符:matches。
EL表达式语言

Tip:获得web开发常用对象
隐含对象名称 param paramValues header headerValues 描 述
表示一个保存了所有请求参数的Map对象 表示一个保存了所有请求参数的Map对象,它对于某个请求 参数,返回的是一个string[] 表示一个保存了所有http请求头字段的Map对象 同上,返回string[]数组。注意:如果头里面有“-” ,例 Accept-Encoding,则要headerValues[“Accept-Encoding”]
Tip: 执行运算
语法:${运算表达式},EL表达式支持如下运算符:
empty运算符:检查对象是否为null或“空”,很好用!!!
Tip:获得web开发常用对象
EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地 获取web开发中的一些常见对象,并读取这些对象的数据。 语法:${隐式对象名称} :获得对象的引用 描 述
隐含对象名称 pageContext pageScope requestScope sessionScope applicationScope
对应于JSP页面中的pageContext对象(注意:取的是 pageContext对象。) 代表page域中用于保存属性的Map对象 代表request域中用于保存属性的Map对象 代表session域中用于保存属性的Map对象 代表application域中用于保存属性的Map对象
(1)升级成tomcat6 (2)在JSP中加入<%@ page isELIgnored="false" %>
Tip: EL表达式保留关键字
所谓保留字的意思是指变量在命名时,应该避开上述的名字,以免 程序编译时发生错误
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1 EL表达式:EL表达式规定为:eval-expression和literal-expression,同时E L表达式支持Compositeexpressions,很多EL表达式(eval-ex pressions和literal-expressions)被聚合在一起。
EL表达式被解析成数值表达式和方法表达式。
其中,取值表达式去引用一个值,而方法表达式则是关联一个方法。
一旦被解析之后,表达式能够被优化地计算一次或多次。
下面我们来分为:eval-expression、literal-expression、Compo siteexpressions来讲述1.1.1Eval-expressionEval-expression是以使用${expr}或者#{expr}结构的形式构成。
两种方式都是相同的方式,能很好被解析和计算,尽管它们在使用时有着不同的意义从技术方面来说。
从J2EE层规范协定来说,${expr}结构是直接计算而#{expr}结构则是延期计算,这种界定符号指出了在J2EE层两种表达式类型的语义上面的区别。
#{expr}这种界定符号被称为延迟计算是因为直到系统需要的时候才计算。
而${expr}这种界定符号则是在JSP页面编译的时候就计算,就是为什么叫做直接计算的原因。
1.1.1.1作为取值表达式的计算表达式当解析成一个取值表达式的时候,eval-expression能被计算成左值和右值。
若在EL中有等号操作符号出现,右值是类型出现在等号的右边的表达式,左值同理。
右值比如:<input type="text"value="${}"/><h:form>以下面这个例子为例:<h:inputTextid="email"value="#{checkOutFormBean.email}"size="25"maxlength="125"validator="#{checkOutFormBean.validateEmail}"/></h:form>当表单被提交的时候,在申请计算的阶段,Faces计算EL表达式#{checkOutFormBean.validateEmail}作为一个数据接口的引用,这个数据结构的数值是被一个表单相关联的输入参数设置。
因此,表达式的结果表现成一个数据结构的引用,或者为一个左值。
在翻译阶段,那个相同的表达式被计算,它产生特殊值关联右值对象,作为JSP实例。
一个左值合法语法是右值合法语法的子集。
在特殊情况,一个左值只能由单个变量(比如${name})或者一个从某个对象中解析属性的组成,通过. 或[]操作符(比如${employee.n ame}在解析取值表达式时,一个预期的类型是被提供的。
拿右值为例,预期的类型是表达式计算被强制的结果。
以左值为例,预期的类型是被忽略的,并且在属性被设置之前,提供的值是被强制为一个表达式指向实际的属性类型。
在后面提供了类型转换1.1.1.2作为方法表达式的计算表达式在某种情况,计算表达式会描述成引用一个方法而不是模型对象。
比如,在JSF中,组建标记也提供了引用方法的属性的集合,这些方法能够执行特定为组建标签关联的函数。
为了支持这些类型的表达式,EL定义了方法表达式(ELclass MethodE xpresssion)<h:inputTextid="email"value="#{checkOutFormBean.email}"size="25"maxlength="125"validator="#{checkOutFormBean.validateEmail}"/></h:form>以上面的例子,validator属性使用了关联方法表达式类型的表达式。
做为一个取值表达式,表达式的计算(调用函数)被延期并且在生命周期内的合理的瞬间能够被底层的技术处理。
方法表达共享相同的左值语法,它只能由单个变量(比如${n ame})或者一个从某个对象中解析属性的组成,通过. 或[]操作符(比如${})。
关于预期返回值类型和参数类型的信息提供在方法被解析的时候。
方法表达式被计算在其引用的方法的调用时候或者获取引用的方法信息。
计算之上,ELAPI 验证方法必须一致于预期方法的签名在解析时候。
因此,没有方法表达式的强制1.1.2字面表达式一个字面表达式不使用${expr}或者#{expr}结构并且简单地计算String类型文本表达式。
在EL上,一个预期某个类型不止提供String。
比如:表达式:Aloha!类型:String 结果:Aloha!true Boolean Boolean.True为了生成字面值包括字符串"${"或者"#{",开发人员能够选择使用组合表达式比如下面:${'${'}exprA}#{'#{'}exprB},这里结果是${exprA}和#{exprB}。
两者选一个,使用转义字符\$和\#能够被用于转义,否则,会被处理为取值表达式。
\${exprA}\#{exprB},这里结果是${exprA}和#{exprB}。
字符表达式能够用在任何取值表达式使用的地方。
一个字符表达式也能使用一个必须要有返回值的方法。
若他们的返回值不是String类型,他们会强制类型转换。
1.1.3.组合表达式:在多个EL表达式被组合一起的地方,EL也支持组合表达式。
取值表达式从左到右北计算,强制成String类型,并且连接任何一个插入字面表达式。
举个例子,组合表达式"${firstName}${lastName}"是由三个EL表达式组合而成,取值表达式"${firstName}"、"${lastNa me}",表达式""。
一旦EL计算,结果会按照EL类型转换规则把从预期的类型强制成String类型。
混合${}和#{}的结构在组合表达式中是非法的。
这种限制的导入是为了避免用户想要使${expr}还是#{expr}指令来计算表达式的含糊不清。
举个例子,前面我们提到了,${}是直接计算并且#{}是延迟计算在J2EEweb层规范的协定中,这就意味这EL表达式在J2EEweb层,开发人员不能强制直接计算那些组合表达式和间接计算的其余部分。
这种限定可能会在未来的版本中回取消,从而为更高级的EL应用模式得到允许。
组合表达式能够在任何EL表达式除了方法表达式之外的地方使用。
仅仅单个取值表达式中能解析方法表达式。
1.1.4.语法约束取值表达式精确地被解析和被计算,在底层的技术导入约束,在EL表达式出现时,语法在使用遵循这些约束。
比如,在JSP2.1,#{}表达式都只能使标签属性接受延迟表达式才被允许,若使用#{}在其他的地发挥报错误。
1.2. 字面值有一些字面值作为boolean,integer,floatingpoint,string和n ull类型在取值表达之中。
Boolean true 和falseInteger - 参看integerLiteralFloating point -参看FloayPointLiteralString - 单引号和双引号' 转义成\', " 转义成\",和\ 转义成\\。
引号只是需要需要转义在string封装值在相同的引号类型。
1.3. 错误,警告、默认值表达式语言已经被设计出来作为web表示层应用程序。
在使用时,经验建议最重要的是能够提供尽可能好的表述来设计,甚至在页面中有的一点错误。
为了达到这个需求,EL不提供警告,只是提供默认值和错误。
默认值都是类型正确的值,这些值被子表达式赋值当有问题时候。
一个错误是异常的抛出(通过EL使用的环境来处理异常)。
1.4.解析模型对象和他们的属性一个核心的概念在EL中,就是计算模型对象名称到一个对象,并且在一个表达式中分离属性应用于对象(操作符. 和[])。
EL API提供一个一般化机制,解析器,通过底层技术实现并且定义了规则,它管理模型对象名称的解析和他们关联属性。
1.5. 操作符[]和.EL遵照的ECMAScript来统一处理.和[] 操作符expr-a.identifier-b 等于expr-a["identifier-b"];验证器identifier -b被用于构造一个字面的值作为一个验证器。
计算expr-a[expr-b]:∙计算expr-a的值放到value-a。
∙若vaule-a等于null:如果expr-a[expr-b]作为末尾的一个属性被解析:若表达式一个值表达式并且ValueExpression.getValue(contex t)被调用,作为初始化表达式计算,返回null。
否则,抛出PropertyNotFoundException的异常.(尝试着去分离引用null 作为左值)否则,返回null∙计算expr-b的值放到value-b∙若value-b等于null;o如果expr-a[expr-b]作为末尾的一个属性被解析:▪若表达式是一个取值表达式并且ValueExpression.getVa lue (context)方法被调用去初始化表达式的计算,返回null。
▪否则,抛出一个PropertyNotFoundException.▪否则返回一个null若表达式是一个取值表达式:▪如果expr-a[expr-b]作为末尾的一个属性被解析:▪若ValueExpression.getValue(context)方法被调用去初始化表达式的计算,则调用elResolver.getValue(context.value-a,value-b)方法。
▪若ValueExpression.getType(context)方法被调用,调用elResolver.getType(context,value-a,value-b)方法。
▪若ValueExpression.isReadOnly(context)方法被调用,则调用elResolver.isReadOnly(context,value-a,value-b)方法。
▪若ValueExpression.setValue(context,val)被调用,则调用elResolver.setValue(context,value-a,value-b,val)方法。