EL表达式

来源:互联网 发布:电脑网络不稳定怎么办 编辑:程序博客网 时间:2024/05/12 13:23

EL表达式全名为Expression Language

EL表达式语法结构:${sessionScope.user.sex}。

所有的EL都是以${XXX}这样的形式来展现的,上述EL范例的意思是:从Session范围内获取user对象的性别sex。之前没有用EL表达式的时候,我们还要使用如下方式获取:

User user = (User)session.getAttribute("user");String sex = user.getSex( );
相比之下,EL表达式就更加方便、简介。

.与[]运算符

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

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

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

${sessionScope.user[0].username} 回传的结果为user数组中第一个人的姓名。


不过在某些情况下,两者还是会有差异的:

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。

范围:


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


其中,pageScope、requestScope、sessionScope和applicationScope都是EL的隐含对象,由他们的名称很容易猜出它们所代表的意思,如:${sessionScope.username}是取出Session范围内的username变量,如果不用EL而采用JSP的写法就比较麻烦:

String username = (String) session.getAttribute("username");


自动转变类型:

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

${param.count + 20},假如窗体传来count值为10时,那么上面的结果为30,之前没学过JSP的人认为上面的例子是理所当然的,但是在JSP1.2之前是不能这样做的,原因是从船体传来的值,他们的类型一律是String,所以在接收之后必须将其转换为对应的类型如,int、float等等。然后再进行运算。如以下做法:

String str_count = request.getParameter("count");int count = Integer.parseInt(str_count);count = count + 20;

所以,千万要注意不要和java的语法(当字符串和数字用"+"链接时,会报把数字转换为字符串),搞混淆啦。

EL隐含对象

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




EL算数运算

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

如下代码:

<body><h2>表达式语言 - 算术运算符</h2><hr><table border="1" bgcolor="aaaadd"><tr><td><b>表达式语言</b></td><td><b>计算结果</b></td></tr><!-- 直接输出常量 --><tr><td>\${1}</td><td>${1}</td></tr><!-- 计算加法 --><tr><td>\${1.2 + 2.3}</td><td>${1.2 + 2.3}</td></tr><!-- 计算加法 --><tr><td>\${1.2E4 + 1.4}</td><td>${1.2E4 + 1.4}</td></tr><!-- 计算减法 --><tr><td>\${-4 - 2}</td><td>${-4 - 2}</td></tr><!-- 计算乘法 --><tr><td>\${21 * 2}</td><td>${21 * 2}</td></tr><!-- 计算除法 --><tr><td>\${3/4}</td><td>${3/4}</td></tr><!-- 计算除法 --><tr><td>\${3 div 4}</td><td>${3 div 4}</td></tr><!-- 计算除法 --><tr><td>\${3/0}</td><td>${3/0}</td></tr><!-- 计算求余 --><tr><td>\${10%4}</td><td>${10%4}</td></tr><!-- 计算求余 --><tr><td>\${10 mod 4}</td><td>${10 mod 4}</td></tr><!-- 计算三目运算符 --><tr><td>\${(1==2) ? 3 : 4}</td><td>${(1==2) ? 3 : 4}</td></tr></table></body>

上述代码输出结果:

注:EL表达式会把所有的数值都当成浮点数处理,所以3/0的实质是3.0/0.0,得到的结果应该是Infinity。

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

EL关系运算符:


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

注:在使用EL关系运算符时,不能写成:

${param.pwd}==${param.pwd2}或者是${${param.pwd}==${param.pwd2}}

而应该写成:

${param.pwd==param.pwd2}。

EL逻辑运算符:


Empty运算符

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

条件运算符:

${A ? B : C}


0 0
原创粉丝点击