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-expression
Eval-expression是以使用${expr}或者#{expr}结构的形式构成。两种方式都是相同的方式,能很好被解析和计算,尽管它们在使用时有着不同的意义从技术方面来说。
从J2EE层规范协定来说,${expr}结构是直接计算而#{expr}结构则是延期计算,这种界定符号指出了在J2EE层两种表达式类型的语义上面的区别。#{expr}这种界定符号被称为延迟计算是因为直到系统需要的时候才计算。而${expr}这种界
定符号则是在JSP页面编译的时候就计算,就是为什么叫做直接计算的原因。
1.1.1.1作为取值表达式的计算表达式
当解析成一个取值表达式的时候,eval-expression能被计算成左值和右值。若在EL中有等号操作符号出现,右值是类型出现在等号的右边的表达式,左值同理。
右值比如:
以下面这个例子为例:
id="email" value="#{checkOutFormBean.email}" size="25"maxlength="125" validator="#{checkOutFormBean.validateEmail}"/> 当表单被提交的时候,在申请计算的阶段,Faces计算EL表达式#{checkOutFormBean.validateEmail}作为一个数据接口 的引用,这个数据结构的数值是被一个表单相关联的输入参数设置。因此,表达式的结果表现成一个数据结构的引用,或者为一个左值。 在翻译阶段,那个相同的表达式被计算,它产生特殊值关联右值对象,作为JSP实例。 一个左值合法语法是右值合法语法的子集。在特殊情况,一个左值只能由单个变量(比如${name})或者一个从某个对象中解析属性的组成,通过. 或[]操作符(比如${employee.n ame} 在解析取值表达式时,一个预期的类型是被提供的。拿右值为例,预期的类型是表达式计算被强制的结果。以左值为例,预期的类型是被忽略的,并且在属性被设置之前,提供的值是被强制为一个表达式指向实际的属性类型。在后面提供了类型转换 1.1.1.2作为方法表达式的计算表达式 在某种情况,计算表达式会描述成引用一个方法而不是模型对象。 比如,在JSF中,组建标记也提供了引用方法的属性的集合,这些方法能够执行特定为组建标签关联的函数。为了支持这些类型的表达式,EL定义了方法表达式(ELclass MethodE xpresssion) id="email" value="#{checkOutFormBean.email}" size="25"maxlength="125" validator="#{checkOutFormBean.validateEmail}"/> 以上面的例子,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}",表达式""。