EL表达式

    EL 全名为Expression Language。EL 语法很简单,它最大的特点就是使用上很方便。

    所有EL都是以${为起始、以}为结尾的。

     例如:${sessionScope.user.sex}Session的范围中,取得用户的性别。

        假若依照之前JSP Scriptlet的写法如下:

        User user = (User)session.getAttribute("user");

        String sex = user.getSex( );

   两者相比较之下,可以发现EL 的语法比传统JSP Scriptlet 更为方便、简洁。

   EL 提供 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:

       ${sessionScope.user.sex}等于${sessionScope.user["sex"]}

          . 和 [ ] 也可以同时混合使用,如下:

        ${sessionScope.shoppingCart[0].price}

        回传结果为shoppingCart中第一项物品的价格。

    不过,以下两种情况,两者会有差异:

    (1) 当要存取的属性名称中包含一些特殊字符,如或 – 等并非字母或数字的符号,就一定要使用 [ ],例如:${user.My-Name }

上述是不正确的方式,应当改为:${user["My-Name"] }

    (2) 我们来考虑下列情况:

        ${sessionScope.user[data]}

     此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex}假若data 的值为"name"时,它就等于${sessionScope.user.name}。因此,如果要动态取值时,就可以用上述的方法来做,但无法做到动态取值。

   EL 变量

     EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到RequestSessionApplication范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。

属性范围(jstl名称)

EL中的名称

Page

PageScope

Request

RequestScope

Session

SessionScope

Application

ApplicationScope

我们也可以指定要取出哪一个范围的变量:

范例

说明

${pageScope.username}

取出Page范围的username变量

${requestScope.username}

取出Request范围的username变量

${sessionScope.username}

取出Session范围的username变量

${applicationScope.username}

取出Application范围的username变量

    其中,pageScoperequestScopesessionScopeapplicationScope都是EL 的隐含对象,由它们的名称可以很容易猜出它们所代表的意思,例如:${sessionScope.username}是取出Session范围的username 变量。这种写法是不是比之前JSP 的写法:

    String username = (String) session.getAttribute("username");容易、简洁许多.

   自动转变类型

     EL 除了提供方便存取变量的语法之外,它另外一个方便的功能就是:自动转变类型,我们来看下面这个范例:

     ${param.count + 20}

     假若窗体传来count的值为10时,那么上面的结果为30。之前没接触过JSP 的读者可能会认为上面的例子是理所当然的,但是在JSP 1.2 之中不能这样做,原因是从窗体所传来的值,它们的类型一律是String,所以当你接收之后,必须再将它转为其他类型,如:intfloat 等等,然后才能执行一些数学运算,下面是之前的做法:

     String str_count = request.getParameter("count");

     int count = Integer.parseInt(str_count);

     count = count + 20;
     所以,注意不要和java的语法(当字符串和数字用“+”链接时会把数字转换为字符串)搞混淆。

   EL 隐含对象

    JSP9隐含对象,而EL也有自己的隐含对象。EL隐含对象总共有11 

隐含对象

类型

说明

PageContext

javax.servlet.ServletContext

表示此JSPPageContext

PageScope

java.util.Map

取得Page范围的属性名称所对应的值

RequestScope

java.util.Map

取得Request范围的属性名称所对应的值

sessionScope

java.util.Map

取得Session范围的属性名称所对应的值

applicationScope

java.util.Map

取得Application范围的属性名称所对应的值

param

java.util.Map

如同ServletRequest.getParameter(String name)。回传String类型的值

paramValues

java.util.Map

如同ServletRequest.getParameterValues(String name)。回传String[]类型的值

header

java.util.Map

如同ServletRequest.getHeader(String name)。回传String类型的值

headerValues

java.util.Map

如同ServletRequest.getHeaders(String name)。回传String[]类型的值

cookie

java.util.Map

如同HttpServletRequest.getCookies()

initParam

java.util.Map

如同ServletContext.getInitParameter(String name)。回传String类型的值

 

不过有一点要注意的是如果你要用EL输出一个常量的话,字符串要加双引号,不然的话EL会默认把你认为的常量当做一个变量来处理,这时如果这个变量在4个声明范围不存在的话会输出空,如果存在则输出该变量的值。

   EL算术运算

表达式语言支持的算术运算符和逻辑运算符非常多,所有在Java语言里支持的算术运算符,表达式语言都可以使用;甚至Java语言不支持的一些算术运算符和逻辑运算符,表达式语言也支持。

   表达式语言把所有数值都当成浮点数处理.

  如果需要在支持表达式语言的页面中正常输出“$”符号,则在“$”符号前加转义字符“\”,否则系统以为“$”是表达式语言的特殊标记。

EL关系运算符

关系运算符

说明

范例

结果

== 或 eq

等于

${5==5}${5eq5}

true

!= 或 ne

不等于

${5!=5}${5ne5}

false

或 lt

小于

${3<5}${3lt5}

true

或 gt

大于

${3>5}{3gt5}

false

<= 或 le

小于等于

${3<=5}${3le5}

true

>= 或 ge

大于等于

5}${3ge5}

false

表达式语言不仅可在数字与数字之间比较,还可在字符与字符之间比较,字符串的比较是根据其对应UNICODE值来比较大小的。

注意:在使用EL 关系运算符时,不能够写成:
${param.password1} = = ${param.password2}
或者
${ ${param.password1 } = = ${ param.password2 } }
而应写成
${ param.password1 = = param.password2 }


EL
逻辑运算符

逻辑运算符

范例

结果

&&and

交集${A && B}${A and B}

true/false

||or

并集${A || B}${A or B}

true/false

!not

${! A }${not A}

true/false

 

Empty 运算符

Empty 运算符主要用来判断值是否为空(NULL,空字符串,空集合)。

 

条件运算符

${ A ? B : C}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值