EL表达式介绍

产生背景:

在MVC体系结构中,JSP页面只是用来显示数据,但JSP脚本中的表达式功能不够强大,它不能直接对隐式对象中某对象的属性进行显示,需要配合scriptlet才能显示数据,很是麻烦,如果在JSP页面中使用EL表达式将大大简化JSP页面中的Java代码,再配合JSP标准库(JSTL),可达到真正的JSP无脚本。

EL简介:

EL(Expression Language)表达式语言,语法:${表达式},例如:${"Beijing 2008"}则在JSP页面输出Beijing 2008,相当于JSP脚本中的<%="Beijing 2008"%>,在EL表达式中的单引号和双引号功能是一样的,表示一个字符串。再如:${sessionScope.user.sex},述EL范例的意思是:从Session的范围中,取得用户的性别。假若依照之前JSP scriptlet的写法如下:
User user = (User)session.getAttribute("user");
String sex = user.getSex();
两者相比较之下,可以发现EL 的语法比传统JSP Scriptlet 更为方便、简洁。

EL的使用:

在JSP页面中我们可以禁用EL表达式,需要配置page指令的isELIgnored属性,属性值若为true则支持EL表达式,若为false则禁用表达式,默认情况下是支持EL表达式的。

算术运算符+:

在EL表达式中的'+'只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作数转换为数值类型,进而进行数学加法运算,最后把结果输出。若出现${'a'+'b'}则会出现异常。例如:${6+6}

.与[ ]运算符:

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 范围找,假如找不到,再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。

属性范围(jstl名称)EL中的名称
PagePageScope
RequestRequestScope
SessionSessionScope
ApplicationApplicationScope

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

范例说明
${pageScope.username}取出Page范围的username变量
${requestScope.username}取出Request范围的username变量
${sessionScope.username}取出Session范围的username变量
${applicationScope.username}取出Application范围的username变量

其中,pageScope、requestScope、sessionScope和applicationScope都是EL的隐含对象,由它们的名称可以很容易猜出它们所代表的意思,例如:${sessionScope.username}是取出Session范围的username 变量。这种写法是比之前JSP的写法:
String username = (String) session.getAttribute("username");容易、简洁许多。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值