EL表达式

以下的内容有些参考书上的,有些参考网页的资料。

EL表达式的英文是Exression Language,它是JSP2.0中引入的一个新的内容,通过EL表达式,我们可以简化在JSP开发中对对象的引用,从而规范页面的代码,增加程序的可读性及维护性。

1.EL的基本语法

它是以"${"开头,以"}"结束的,中间是合法的表达式。

${expression},其中expression是用于指出要输出的内容,可以是字符串,也可以是由EL运算符组成的表达式。而且我们如果要输出一个字符串的话,我们应该把字符串放在一对单引号或者双引号内。

那我们可以怎样地访问数据了,EL还提供了[]和.两种形式的让我们去访问数据。

其实一般上这两种形式都是等价的,但是如果对象的属性名中包括了一些特殊的符号(-或者.)时,我们就只能使用"[]"来访问对象的属性了,而且"[]"还可以用来获取数据或者List集合中的数据。因为"[]"可以指定元素,但是"."不可以指定元素的。

例如我们来看看一个例子:

通过EL输出数组的全部元素。

假设我们自定义一个数组:

<%String[] arr={"java web","java","JSP"};

request.setAttribute("arr",arr);

%>

<%

String[] arr=(String[])request.getAttribute("arr");

for(int i=0;i<arr.length;i++}

{

request.setAttribute("i",i);

%>

${requestScope.i}:${requestScope.arr[i]}

<%

}

%>

**还有另一个集合的例子:

向session域中保存一个包含3个元素的List对象,并应用能够EL输出该集合的全部元素代码。

<%

List<String> list=new ArrayList<String>();

list.add("java");

list.add("java web");

list.add("JSP");

session.setAttribute("list",list);

%>

<%

List<String> list=(List<String>)session.getAttribute("list");

for(int i=0;i<list.length;i++){

request.setAttribute("i",i);

%>

${requestScope.i}:${sessionScope[i]}

<%

}

%>

由以上的代码可以知道,当我们要运用到一个数组或者一个集合,我们首先要创建一个数组或者一个集合,然后把数据添加到集合里面去,把集合保存在特定的范围里。然后再把集合或者数组中的数据拿出来,通过循环把他们显示出来。

我们应该都知道,数组的索引是从0开始的,所以我们要获取第一个元素的话,我们应该需要的索引值为0.

2.禁用EL

有些时候,一些比较低版本的浏览器会不支持EL的,此时就需要我们去禁用EL表达式。不过一般来说,都不太需要去禁用的。下面就介绍禁用EL的方法。

a. 使用斜杠"\"符号去禁用EL,有些时候,我们会不想启用EL,或者有些时候我们想输出${这个符号的话,我们就可以在${前面添加"\"这个符号,这样子就可以达到禁用页面中的某个EL表达式了。

\${name},这样子EL表达式就会直接显示在页面上,而不会输出name的值。

b. 使用page指令

<%@page isELIgnored="布尔值"%>,如果布尔值为true,那就说明了该整个页面都禁用EL表达式。

c. 在web.xml文件中配置<el-ignored>元素

如果我们想禁用服务器中的EL,我们就需要在web.xml文件中实现,其中具体代码:

<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>

这里值得注意的是,我们再给这些变量名取名字的时候,应该尽量避免使用关键字的。其中EL的关键字有:

and   eq   gt   instanceof  div  or  le  false  empty  not  It  ge

如果我们使用了这些关键字的话,就会出现错误的。


3.EL的特点

首先EL除了语法简单,使用方便的特点外,其实还有其他的特点:

a. EL会自动地进行类型的转换,如果想通过EL输入两个字符串型数值的和,那可以直接通过"+"来进行求和,"+"号是没有连接字符串的意思,只有加法求和的作用,但是如果两个是不能转换为数值型的字符串,就会抛出异常。

b. EL不仅可以访问一般的变量,还可以访问Javabean中的属性以及嵌套属性和集合对象。

c. 在EL中可以执行算术运算,逻辑运算,关系运算和条件运算等操作。

d. 在EL中可以获得命名空间(PageContext)对象,它是页面中所有其他内置对象的最大范围的集成对象,通过它可以访问其他的内置对象。

e. 在使用EL进行出发运算的时候,如果0作为的是除数,那么就会返回无穷大Infinity,而不返回错误。

f. 扩展函数可以与java类的静态方法进行映射。

g. 在EL中可以访问JSP的作用域(request,session,application以及page)


4.变量

EL存取变量数据的方法很简单的,例如${name}这样子表示取出某一范围中名称为name的变量。

因为我们并没有指定是哪一个范围的name,所以它一般会按顺序(Page,Request,Session,Application)来寻找该变量的,如果在其中找到了该变量,那么就不会继续往下找的,但是加入全部范围里都没有找到该变量的时候,就回传null。


5.在EL中判断对象是否为空

我们可以通过empty运算符来实现的,这个运算符是一个前缀的运算符,位于操作数的前方的,用来确定一个对象或者一个变量是否为空或者null的。

例如:

<%request.setAttribue("user1","");

request.setAttribute("user2",null);%>


$(empty user1}   //返回值为true

${empty user2}   //返回值为true

其实,当一个对象是null或者是"",他们所表达的含义是不同的,null表示的是这个变量没有指明任何对象,而空表示的是这个变量的内容为空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值