码迷,mamicode.com
首页 > 其他好文 > 详细

浅谈EL

时间:2017-03-17 23:18:05      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:2.3   values   map   sub   input   setattr   绑定   attr   esc   

 

一、了解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

标签:2.3   values   map   sub   input   setattr   绑定   attr   esc   

原文地址:http://www.cnblogs.com/boWatermelon/p/6568884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!