首页 > 代码库 > 浅谈EL

浅谈EL

 

一、了解EL


  1、EL是从 JavaScript 脚本语言得到启发的一种表达式语言,它借鉴了 JavaScript 多类型转换无关性的特点。在使用 ELscope 中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。 Web 服务器对于 request 请求参数通常会以 String 类型来发送,在得到时使用的 Java 语言脚本就应该是 request.getParameter(“XXX”) ,这样的话,对于实际应用还必须进行强制类型转换。而 EL 就将用户从这种类型转换的繁琐工作脱离出来,允许用户直接使用 EL 表达式取得的值,而不用关心它是什么类型。

2、EL的功能:

  • 可以访问jsp中不同域的对象
  • 可以访问JavaBean中的属性
  • 可以访问集合元素
  • 可以支持简单操作符运算

二、EL变量


 1、EL的表达式:${expression}  例如:${param.name} 它等同于 <%=request.getParameter("name") %>   

 2、EL的变量。

 ①EL的隐式变量包括pageScope,requestScope,sessionScope,applicationScope,任何再起作用与范围内的JavaBean的实例都可以当作EL来表达。

< %    request.setAttribute("age",20) ;    session.setAttribute("name","yang");%>//调用其变量${requestScope.age}${sessionScope.age}

②隐含变量param、paramValues,param是取得某一个参数,paramValues失去的某个参数的集合(即为表单中数个控件的name值相同,传过来的是一个参数数组)。例如:表单传过3个参数名同为firstName的参数分别为yang,wang,li。当参数传过来以后存储在paramValue数组中可以通过 ${paramValue.firstName[1] } 获得姓氏为wang的参数。简单演示如下

<html>  <body>       <form action="name.jsp">         <input type="text" name="firstName" value="yang">         <input type="text" name="firstName" value="wang">         <input type="text" name="firstName" value="li">         <input type="text" name="secondName" value="bo">         <input type="submit" value="Submit"> 
  <!--获取相应参数的方法
    ${paramValue.firstName[1] }
    ${param.secondName }
  -->
</form> </body> </html>

③其他变量。诸如header,headerValue,cookie,initParam,pageContext等使用与上边两种相同

    注意:除过pageContext其与变量都是映射值

三、EL ( .)与[]使用

1、(.)的使用

 (.)的左边必须是一个映射值也可以是一个bean得性质(如果第一个变量是javabean的属性)。点号右边必须符合命名规则必须以字母、_或$开头,如上边给出的代码映射键均可以通过点号获取其映射值。只有当左边是映射键或者bean属性时才可以用点号,另一种el的使用方式将更加灵活。

2、[]能让你有更多的选择,比如是一个数组,list,或map的一个值(其键对应的值可能不符合命名规则此时只能用该形式)。下面将展示几种[]的用法以及所要注意的点

①对数组使用[]

    

      <%           String name[] = {yang, wang, li, han};           request.setAttribute("name", name);       %>       第一个姓氏为:${name }       <!-- 返回一个Stirng数组的toString值 -->       第一个姓氏为:${name[0] }      <!-- 其值为yang -->       第一个姓氏为:${name["0"] }    <!-- 同样显示值为yang -->

你可能会问为什么一个加引号一个不加引号为什么会得出相同的值?

  原因在于List和String中的索引会强制转化为int

②对于bean和数组点号和[]都可以使用

③当[]中没有引号时即不是String直接量时会进行计算,搜索与该名字绑定的属性,并替换为该属性的值。下面来一一小段代码进行演示

   <%           HashMap name =  new HashMap();           name.put("zhang", "san");           name.put("li", "si");           name.put("wang", "mazi");           request.setAttribute("name", name);           request.setAttribute("li", "zhang");     %>               姓李的人为: ${name["li"] } <!-- 获得值为si -->           姓李的人为: ${name[li] }   <!-- 获得的值为san -->           <!-- 第二个参数li没有引号,则搜索与该值绑定的属性的值,与其绑定的值为zhang,故zhang会替换li,所以最终获得的值为san -->

注意:el中都是表达式,可以是嵌套表达式,深度不限。可以将一个复杂表达式放在另外一个复杂表达式

四、禁用EL

 


 

   EL是在JSP2.0以后才有的新特性,因此将JSP版本设置为较低时(Servlet2.3或者更早)其将不再支持EL标签

  在单个页面禁用使用如下命令

  

<%@page isELIgnoreD = "true" %>

 

浅谈EL