zoukankan      html  css  js  c++  java
  • EL表达式

    1、EL表达式概述

    为了使JSP中表达式写起来更方便

    2、EL表达式的作用

    2.1、获取数据

    EL表达式主要用于替换JSP页面中的脚本表达式<%= 变量或表达式 %>,以从各种类型的web域 中检索java对象、获取数据。

    ——(访问某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)

    2.1.1、语法——

    "${标识符}"

    原理:会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回””空字符串。 

    2.1.2、实践——

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@page import="domain.User" %>
        <%@page import="java.util.*" %>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <title>在此处插入标题</title>
    </head>
    <body>
        <% 
            request.setAttribute("name","张馨艺");
        %>
            <%--${name}等同于pageContext.findAttribute("name") --%>
            使用EL表达式获取数据:${name}  
        <hr>
        <!-- 在jsp页面中,使用el表达式可以获取bean的属性 -->
        <% 
            User u = new User();
            u.setName("张叉叉");
            request.setAttribute("user",u);
        %>
            使用el表达式可以获取bean的属性:${user.name}
         <hr>
        <!-- 在jsp页面中,使用el表达式获取list集合中指定位置的数据 -->
        <% 
            User p1 = new User();
            p1.setName("嘻嘻嘻");
            
            User p2 = new User();
            p2.setName("哈哈哈");
            
            List<User> list = new ArrayList<User>();
            list.add(p1);
            list.add(p2);
            
            request.setAttribute("list",list);
        %>
        
        <!-- 取list指定位置的数据 -->
        ${list[1].name} 
        
        <!-- 迭代List集合 -->
        <c:forEach var="person" items="${list}">
            ${person.name}
        </c:forEach>
        <hr>
        <!-- 在jsp页面中,使用el表达式获取map集合的数据 -->
        <% 
            Map<String,String> map = new LinkedHashMap<String,String>();
            map.put("a","aaaaxxx");
            map.put("b","bbbb");
            map.put("c","cccc");
            map.put("1","aaaa1111");
            request.setAttribute("map",map);
        %>
        
        <!-- 根据关键字取map集合的数据 -->
          ${map.c}  
          ${map["1"]}
          <hr>
          <!-- 迭代Map集合 -->
          <c:forEach var="me" items="${map}">
              ${me.key}=${me.value}<br/>
          </c:forEach>
        <hr>
    </body>
    </html>

     

    2.2、执行运算

    利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。

     2.2.1、语法——

    ${运算表达式}

    2.2.2、运算符——

    关系运算符

    逻辑运算符

     

    empty()运算符

       ${user == null}和 ${user eq null}

      ${empty(emptyList)}

    三元表达式

    []和.号运算

     2.2.3、实践——

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <%@page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@page import="domain.User" %>
    <%@page import="java.util.*" %>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>在此处插入标题</title>
    </head>
    <body>
        <h3>el表达式进行四则运算:</h3>
            加法运算:${365+24}<br/>
            减法运算:${365-24}<br/>
            乘法运算:${365*24}<br/>
            除法运算:${365/24}<br/>
            
        <h3>el表达式进行关系运算:</h3>
        <%--${user == null}和 ${user eq null}两种写法等价--%>
            ${user == null}<br/>
            ${user eq null}<br/>
            
        <h3>el表达式使用empty运算符检查对象是否为null(空)</h3>
        <% 
            
            List<String> list = new ArrayList<String>();
            list.add("ZXY");
            list.add("ZCC");
            request.setAttribute("list",list);
        %>
        <%--使用empty运算符检查对象是否为null(空) --%>
        <c:if test="${!empty(list)}">
            <c:forEach var="str" items="${list}">
                ${str}<br/>
            </c:forEach>
        </c:if>
        <br/>
        <%
            List<String> emptyList = null;
        %>
        <%--使用empty运算符检查对象是否为null(空) --%>
        <c:if test="${empty(emptyList)}">
            对不起,没有您想看的数据
        </c:if>
    
        <br/>
        
        <h3>EL表达式中使用二元表达式</h3>
        <% 
            session.setAttribute("user",new User("张馨艺"));
        %>
        ${user==null? "对不起,您没有登陆 " : user.name}
    
        <br/>
        
        <h3>EL表达式数据回显</h3>
        <% 
            User user = new User();
            user.setGender("male");
            //数据回显
            request.setAttribute("user",user);
        %>
           <input type="radio" name="gender" value="male" ${user.gender=='male'?'checked':''}><input type="radio" name="gender" value="female" ${user.gender=='female'?'checked':''}><br/>65
    </body>
    </html>

     

    2.3、获取web开发常用对象

    EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

    2.3.1、EL表达式中定义的11个隐式对象——

    序号 隐含对象名称 描       述
    1 pageContext 对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。)
    2 pageScope 代表page域中用于保存属性的Map对象
    3 requestScope 代表request域中用于保存属性的Map对象
    4 sessionScope 代表session域中用于保存属性的Map对象
    5 applicationScope 代表application域中用于保存属性的Map对象
    6 param 表示一个保存了所有请求参数的Map对象
    7 paramValues 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
    8 header 表示一个保存了所有http请求头字段的Map对象,注意:如果头里面有“-” ,例Accept-Encoding,则要header[“Accept-Encoding”]
    9 headerValues

    表示一个保存了所有http请求头字段的Map对象,它对于某个请求参数,返回的是一个string[]数组。注意:如果头里面有“-” ,则使用驼峰命名法

    10 cookie 表示一个保存了所有cookie的Map对象
    11 initParam 表示一个保存了所有web应用初始化参数的map对象

     

     

     

     

     

     

     

     

    2.3.2、实践——

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>在此处插入标题</title>
    </head>
    <body>
     <br/>---------------1、pageContext对象------------------------<br/>
            ${pageContext}
        <br/>---------------2、page域(pageScope)------------------------<br/>
        <% 
            pageContext.setAttribute("name","张馨艺");  
        %>
            ${pageScope.name}
           <br/>---------------3、request域(requestScope)------------------------<br/>
           <% 
               request.setAttribute("name","张叉叉");  
           %>
               ${requestScope.name}
           <br/>---------------4、session域(sessionScope)------------------------<br/>
           <% 
               session.setAttribute("user","zxy");  
           %>
               ${sessionScope.user}
           <br/>---------------5、application域(applicationScope)------------------------<br/>
           <% 
               application.setAttribute("user","zcc");  
           %>
               ${applicationScope.user}
           
    </body>
    </html>

    2.4、调用Java方法

    EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@page import="java.util.Arrays"%>
    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
    <%@page import="domain.User" %>
    <%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
    
    <html>
    <head>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>在此处插入标题</title>
    </head>
    <body>
        fn:toLowerCase("Www.CNBLIGS.COM")的结果:${fn:toLowerCase("Www.CNBLIGS.COM") }
        <hr/>
        fn:toUpperCase("Www.cnblogs.com")的结果:${fn:toUpperCase("Www.cnblogs.com") }
        <hr/>
        fn:trim("  cnblogs.com  ")的结果是:${fn:trim("    cnblogs.com   ") }
        <hr/>
        <%
            List<String> list = Arrays.asList("1","2","3","4");
            request.setAttribute("list", list);
        %>
        fn:length(list)计算集合list的size的值是:${fn:length(list) }
        <hr/>
        fn:length("cnblogs.com")计算字符串的长度是:${fn:length("cnblogs.com") }
        <hr/>
        fn:split("www.baidu.com",".")[0]的结果是:${fn:split("www.baidu.com", ".")[0] }
        <hr/>
        <%
            String[] StringArray= {"www","baidu","com"};
            pageContext.setAttribute("StringArray", StringArray);
        %>
        fn:join(StringArray,".")的结果是:${fn:join(StringArray, ".") }
        <hr/>
        fn:join(fn:split("www,iteye,com",","),".")的字符串: ${fn:join(fn:split("www,baidu,com", ","),".") }
        <hr/>
        fn:indexOf("www.iteye.com","eye")的返回值为:${fn:indexOf("www.iteye.com","eye") }
        <hr/>
        <%
            User user = new User();
            String likes[] = {"sing", "dance"};
            user.setLikes(likes);
            request.setAttribute("user", user);
        %>
        <%--使用el函数回显数据 --%>
       <input type="checkbox" name="like" 
                   value="sing" ${fn:contains(fn:join(user.getLikes(),","),"sing")?'checked':''}/>唱歌
       <input type="checkbox" name="like" 
                   value="dance" ${fn:contains(fn:join(user.getLikes(),","),"dance")?'checked':''}/>跳舞
       <input type="checkbox" name="like" 
                   value="basketball" ${fn:contains(fn:join(user.getLikes(),","),"basketball")?'checked':''}/>蓝球
       <input type="checkbox" name="like" 
                   value="football" ${fn:contains(fn:join(user.getLikes(),","),"football")?'checked':''}/>足球
       <hr/>
       fn:replace("www   baidu   com   ", " ", ".")的返回值为字符串: ${fn:replace("www baidu com", " ", ".") }
       <hr/>
       fn:startsWith("www.baidu.com","www")的返回值为:${fn:startsWith("www.baidu.com", "www") }
       <hr/>
       fn:substring("www.baidu.com", 3, 9) 的返回值为字符串:${fn:substring("www.baidu.com", 3, 9) }
       <hr/>
       fn:substringAfter("www.baidu.com","bai")的返回值为字符串:${fn:substringAfter("www.baidu.com","bai") }
       <hr/>
       fn:substringBefore("www.baidu.com","bai")的返回值为字符串:${fn:substringBefore("www.baidu.com", "bai") }
       
        
    </body>
    </html>

  • 相关阅读:
    python 3 dict函数 神奇的参数规则
    python 3 黑色魔法元类初探
    私有变量为何传给了子类?
    [转]django-registration quickstart
    DoesNotExist at /account/
    DoesNotExist at /admin/
    setting.py
    Python excel 奇怪的通信规则
    Python 一个奇特的引用设定
    Chrome 内存和CPU消耗量双料冠军
  • 原文地址:https://www.cnblogs.com/chacha-z/p/10709795.html
Copyright © 2011-2022 走看看