zoukankan      html  css  js  c++  java
  • 浅谈EL

    一、了解EL


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

    2、EL的功能:

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

    二、EL变量


       

       1、EL存取变量数据的方法很简单,例如:${goodsList}。它的意思是取出某一范围中名称为username的变量。  因为我们并没有指定哪一个范围的goodsList,所以它会依序从Page、Request、Session、Application范围查找。假如途中找到goodsList,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。假如goodsList是一个集合对象,则该集合中的对象的属性可以通过点或者[]获取其属性值。例如该集合存放的是goods对象,而goods对象中有name 和id属性。用jstl标签forEach

    获取集合对象时:<c:forEach items="${goodsList}" var = "goods">, 则可以通过${goods.id},${goods.name}来获取属性值。通过该方法获取时goods类必须有get方法如果没有就会出现javax.el.PropertyNotFoundException: Property 'goodPhoto' not found on type java.lang.String错误,具体参考该博文

        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" %>
    人真是奇怪,非得走到最后一步,是不会觉悟的。但是到了最后一步,又觉得太晚了。
  • 相关阅读:
    Jenkins理解逻辑图
    什么是Jenkins?
    SpringBoot Test及注解详解
    如何熟悉一个新项目
    调用百度OCR模块进行文字识别
    python安装包的方法&安装遇到的问题总结_2020_11_19
    怎么让谷歌浏览器记住密码(不需要任何插件)
    excel以一列数据为x一列为y作折线图
    java创建新java文件的方法
    Mathematics释放变量的方法
  • 原文地址:https://www.cnblogs.com/boWatermelon/p/6568884.html
Copyright © 2011-2022 走看看