EL

作者在 2008-10-04 11:14:19 发布以下内容

JSP2.0表达式语言

JSP表达式语言介绍(了解):

表达式语言减轻页面工作量,减少JSP页面中的脚本(JSP声明、表达式、scriptlets)。

EL表达式可同时在文本和标准动作或制定动作的特性中出现。

ELJSP编程中并不是全新的。EL首先出现在JSP标准标签库JSTL1.0规范中。

通过将标准库导入到他们的应用中,JSP2.0程序员可使用该语言。

现在ELJSP的一部分,在没有JSP标准标记库时也可以使用EL

EL引用CSS文件:

 <link rel=”stylesheet” type=”text/css” href=”${pageContext.request.contxtPath}/Styles.css”>

1.1构建EL表达式

语法:${expression}——想输出”${“字符,则必须转义第一个字符:”\${“

       可以连接两个表达式。表达式的顺序必须是从左到右,强制转换位字符串类型,并且连接起来。

Eg:如果a+b等于8,同时c+d等于10,那么:

${a+b}${c+d}等于多少?

${a+b}some${c+d}text

       ——810

       ——8some10text

 

如果定制标记的特性值中使用表达式,这个表达式就会被求值,并且结果字符串被强制转换为该特性所期望的类型

<my:tag someAttribute=”${expression}”/>

表达式的求值规则:从左到右求值。对于一般的语法exprA[exprB]

(1)       exprA求值并放入valueA中。

(2)       如果valueA值为null,则返回null

(3)       exprB求值并放入valueB中。

(4)       如果valueB值为null,则返回null

(5)       如果valueA是一个Map,则检查valueB是否为Map中的一个键。如果是,则返回valueA.get(valueB),否则返回null

(6)       如果valueA是一个List或一个数组,则:将valueB强制转换位int类型。如果强制转换失败,则抛出一个异常。如果valueA.get(valueB)或者Array.get(valueA,valueB)抛出ArrayIndexOutOfBoundsExceptionIndexOutOfBoundsException异常,返回null。否则,返回valueA.get(valueB)Array.get(valueA,valueB)

(7)       在这种情况下,valueA必须是一个JavaBean,因此将valueB强制转换成String类型。如果valueBvalueA的一个可读取的属性,它就会调用这个属性的getter方法并从这个getter方法中返回一个值。如果这个getter方法抛出异常,就表示产生了错误。

(8)       否则产生错误。

 

EL中的保留字

and

true

or

false

not

null

Null

eq

等于

empty

ne

不等于

div

除法

gt

大于

mod

求模

ge

大于等于

 

 

1.2访问对象属性

表达式返回的类型可以是任意类型。如果某个表达式产生了一个带有属性的对象,就可以通过“[]”或“.”运算符访问这个属性。“[]”或“.”运算符可相同对待:[ ]”是更加一般形式,而“.”则更加简洁形式

Use${object[“propertyName”]}

        ${object.protertyName}

如果propertyName不是一个有效的java变量名,必须使用“[ ]”语法。

举个例子说明,隐式对象header表示一个包括所有请求头的Map。为了访问host头,可以使用如下形式之一:

              1.${header[“host”]}                    2.${header.host}

但是,为了访问accept-language头,只能使用”[ ]”运算符,因为accept-language不是一个合法的java变量名。

如果对象的属性是一个同样含有属性的对象,可以使用”[ ]”来访问这个属性。比如,pageContext表示当前JSP页面的PageContext对象。pageContext的其中一个属性是request,它表示ServletRequest对象。ServletRequest对象具有requestURI属性。下面的表达式用于

产生requestURI的属性值:

${pageContext.request.requestURI}

为了访问requestURI的属性值,可以使用下列的任意义中形式:

${pageContext[“request”][“requestURI”]}

${pageContext.request[“requestURI”]}

${pageContext[“request”].requestURI}

1.3访问EL隐式对象

EL的使用之一就是访问一般通用的java代码可获得的信息,比如上下文初始化参数、请求参数、请求头、cookie以及会话对象等。使用EL,可以通过EL隐式对象访问这些信息。

 


使用隐式对象:

1、  pageContext隐式对象

pageContext隐式对象表示当前JSP页面的javax.servlet.jsp.Pagecontext对象。这也是最复杂的一个对象,因为它封装了所有其他的JSP隐式对象(比如outrequestresponse等)。

注意:不要将JSP隐式对象和EL隐式对象混淆。

Eg:获得当前的ServletRequest对象:

              ${pageContext.request}       

       获得request对象的请求URI

${pageContext.request.requestURI}——等价于调用request隐式对象中的getRequestURI方法。

              获得请求参数,可以使用paramparamValues隐式对象。

                     ${pageContext.request.param}

                     ${ pageContext.request.paramValues}(?????)

2、  initParam隐式对象

使用initParam隐式对象来得到上下文初始化参数的值。举个例子,假如有一个称为bgColor的参数,该参数指定了所有页面的背景颜色,那么可以在部署描述符中声明如下的context-param元素:

       <context-param>

              <param-name>bgColor</param-name>

              <param-value>green</param-value>

</context-param>

              然后,可以使用如下的EL表达式来得到bgColor参数的值:

                     <body gbcolor=”${initParam.bgColor}”>

3、  paramparamValues隐式对象

param隐式对象表示一个包括所有请求参数的Map。可以使用这个隐式对象来得到参数值。比如,下面的例子说明了如何获得一个name参数:${paramname}

paramValues隐式对象表示一个包含所有请求参数的Map,用参数名作为键。每个值都是一个字符串类型的数组,该数组包括指定参数名的所有值。如果参数只有一个值,则返回含有一个元素的数组。

Eg:为了得到favSinger参数的第一个和第二个值,可以使用如下表达式:

              ${paramValues. favSinger[0]}

              ${paramValues. favSinger[1]}

4、  HeaderheaderValues隐式对象

Header隐式对象表示一个包含所有请求头的Map,用请求头名作为键。为了得到host头的值,可以使用如下表达式:

               ${header.host}

如果头名不是一个有效的Java变量名,如accp-language,就必须使用“[ ]”运算符:

               ${headerValues[“accept-language”][0]}

5、  Cookie隐式对象

Cookie隐式对象表示一个包含当前的ServletRequest对象中所有cookieMap。举例说明,为了得到一个称为passwordcookie,可以使用如下表达式:

               ${cookiepasswordvalue}

为了得到同一个cookiemaxAge值,使用如下表达式作用域:

               ${cookiePasswordmaxAge}

6、  Scope隐式对象

可以使用applicationScope隐式对象来获得应用作用域内特性的值。比如,如果有一个称为myAttr的应用作用的特性,则可用如下的表达式访问这个特性:

               ${applicationScope.maAttr}

 

favSinger sessionScoperequestScopepageScope隐式对象与applicationScope对象相似。然而,他们所指的作用域分别是会话、请求和页面。

 

1.4使用简单的EL表达式

使用(访问EL表达式隐式对象详例)

2.0访问JavaBean

       JSP中可以用UIOoutput组件来显示JavaBean的属性值。亦可用EL表达式输出JavaBean的值通用语法:

                     使用”[ ]”运算符来访问该bean属性:

${beanNamepropertyName}

EL表达式输出Bean内容时需要配置JavaBean在应用配置文件中用managed-bean元素注册:

              <managed-bean>

                     <managed-bean-name>JavaBeanName</managed-bean-name>

                     <managed-bean-class>classDricetory</managed-bean-class>

                     <managed-bean-scope>application</managed-bean-scope>              

                     <managed-property>

                            <property-name>attributeName</property-name>

                            <value>touchfone</value>

                     </managed-property>

              </managed-bean>

 

使用(书上实例演示/加超链接)

3.0使用表达式语言(EL)运算符

       []运算符以外,EL还为各种操作提供了其他的运算符,这些运算符号又操作数,并且允许一些操作;应该谨慎使用,一般在编写业务逻辑时才使用运算符;

                     ——表示层不是写业务逻辑的地方。

一般应用:

              <body bgColor=”${initParambgColor==null?”yellow”initParam.bgColor}”>如果在部署描述符中不存在bgColor上下文初始化参数,就可以使用如下body元素:

              <body bgColor=”yellow”>

否则,body元素中的bgColor特性值就是在部署描述符中指定的上下文参数bgColor的值。

 

EL表达式按照从高到低、从左到右的优先级别。

       */div%、及mod运算符具有相同的优先级别,要求先求值。然后+-具有相同的优先级别,在第一组优先计算之后求值,因为其优先级要低。

       Eg

       使用(书上实例演示/加超链接)

以下为EL运算符!!

 

4.0调整表达式语言的相关设置

4.1使用EL计算无效

当不希望在一个或多个JSP

JSP | 阅读 5177 次
文章评论,共0条
游客请输入验证码
浏览569861次