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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM