九、EL表示式
阿新 • • 發佈:2018-12-02
EL表示式
一、 EL 全名為Expression Language。EL主要作用:
1、獲取資料
EL表示式主要用於替換JSP頁面中的指令碼表示式,以從各種型別的web域 中檢索java物件、獲取資料。(某個web域 中的物件,訪問javabean的屬性、訪問list集合、訪問map集合、訪問陣列),
2、執行運算
利用EL表示式可以在JSP頁面中執行一些基本的關係運算、邏輯運算和算術運算,以在JSP頁面中完成一些簡單的邏輯運算。${user==null}
3、獲取web開發常用物件
EL 表示式定義了一些隱式物件,利用這些隱式物件,web開發人員可以很輕鬆獲得對web常用物件的引用,從而獲得這些物件中的資料。
4、呼叫Java方法
EL表示式允許使用者開發自定義EL函式,以在JSP頁面中通過EL表示式呼叫Java類的方法。
二、例項
1、獲取資料
使用EL表示式獲取資料語法:"${識別符號}"
EL表示式語句在執行時,會呼叫pageContext.findAttribute方法,用識別符號為關鍵字,分別從page、request、session、application四個域中查詢相應的物件,找到則返回相應物件,找不到則返回”” (注意,不是null,而是空字串)。
EL表示式可以很輕鬆獲取JavaBean的屬性,或獲取陣列、Collection、Map型別集合的資料
例:
<body> <% //將物件設定到pagecontext域物件裡 User u=new User("tom",20); pageContext.setAttribute("user", u);
//將集合設定到request域物件裡 ArrayList<User> list=new ArrayList<User>(); list.add(u); request.setAttribute("list", list); //設定map集合到pageContext域物件裡 Map<String,User> m=new HashMap<String,User>(); m.put("1", u); m.put("2",new User("jia",22)); pageContext.setAttribute("map", m); int []num={1,2,3,4,5};
pageContext.setAttribute("array", num);
%> 獲取key為user的物件:${user}<br/> 獲取該物件的name:${user.name}<br/> 獲取陣列:${array[0]}<br/> 獲取list集合:${list}<br/> 獲取list集合的第一個元素的age屬性${list[0].age}<br/> 獲取key為map的map集合:${map}<br/> 獲取key為1的物件的age屬性${map["1"].age} </body>
注意:在不同的域有相同的屬性名時,會根據從域中按照page、request、session、application的順序查詢 <% session.setAttribute("name", "tom"); request.setAttribute("name", "jia"); %> < h1 >${name}</
h1>//jia
如果要輸出
tom需要這樣寫:
<
h1>${sessionScope.name}</
h1>
效果
<body> <% request.setAttribute("name","tom"); %> <%--${name}等同於pageContext.findAttribute("name") --%> 使用EL表示式獲取資料:${name} <hr> <!-- 在jsp頁面中,使用el表示式可以獲取bean的屬性 --> <% Person p = new Person(); p.setAge(12); request.setAttribute("person",p); %> 使用el表示式可以獲取bean的屬性:${person.age} <hr> <!-- 在jsp頁面中,使用el表示式可以獲取bean中的屬性 --> <% Person person = new Person(); Address address = new Address(); person.setAddress(address); request.setAttribute("person",person); %> ${person.address.name} <hr> <!-- 在jsp頁面中,使用el表示式獲取list集合中指定位置的資料 --> <% Person p1 = new Person(); p1.setName("tom"); Person p2 = new Person(); p2.setName("tom"); List<Person> list = new ArrayList<Person>(); 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","a"); map.put("b","b"); map.put("c","c"); map.put("1","a"); 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、執行運算
<%@page import="com.web.el.User"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri=" http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>el表示式運算子</title>
</head>
<body>
<h3>el表示式進行四則運算:</h3>
加法運算:${5+1}//不能拼接成字串只能相加${"5"+1}
<br /> 減法運算:${1-1}
<br /> 乘法運算:${1*4}
<br /> 除法運算:${10/3}
<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("a");
list.add("b");
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)}">
這是一個空的list集合
</c:if>
<br />
<h3>EL表示式中使用二元表示式</h3>
<%
session.setAttribute("user", new User("jia", 20));
%>
${user==null? "對不起,您沒有登陸 " : user.name}
<br />
<h3>EL表示式資料回顯</h3>
<%
User u = new User();
u.setGender("male");
//資料回顯
request.setAttribute("user", u);
%>
<input type="radio" name="gender" value="male"
${u.gender=='male'?'checked ':''}>男
<input type="radio" name="gender" value="female"
${u.gender=='female'?'':''} >女
<br />
</body>
</html>
三、內建物件
四、內建物件的使用
1、獲取路徑
${pageContext.request.contextPath}
2、獲取key為username cookie的值
${cookie.username.value}
3、獲取請求引數
${param.usernmae}
<body> <% //將物件設定到pagecontext域物件裡 User u=new User("tom",20); pageContext.setAttribute("user", u);
//將集合設定到request域物件裡 ArrayList<User> list=new ArrayList<User>(); list.add(u); request.setAttribute("list", list); //設定map集合到pageContext域物件裡 Map<String,User> m=new HashMap<String,User>(); m.put("1", u); m.put("2",new User("jia",22)); pageContext.setAttribute("map", m); int
%> 獲取key為user的物件:${user}<br/> 獲取該物件的name:${user.name}<br/> 獲取陣列:${array[0]}<br/> 獲取list集合:${list}<br/> 獲取list集合的第一個元素的age屬性${list[0].age}<br/> 獲取key為map的map集合:${map}<br/> 獲取key為1的物件的age屬性${map["1"].age} </body>
注意:在不同的域有相同的屬性名時,會根據從域中按照page、request、session、application的順序查詢 <% session.setAttribute("name", "tom"); request.setAttribute("name", "jia"); %> < h1
<body> <% request.setAttribute("name","tom"); %> <%--${name}等同於pageContext.findAttribute("name") --%> 使用EL表示式獲取資料:${name} <hr> <!-- 在jsp頁面中,使用el表示式可以獲取bean的屬性 --> <% Person p = new Person(); p.setAge(12); request.setAttribute("person",p); %> 使用el表示式可以獲取bean的屬性:${person.age} <hr> <!-- 在jsp頁面中,使用el表示式可以獲取bean中的屬性 --> <% Person person = new Person(); Address address = new Address(); person.setAddress(address); request.setAttribute("person",person); %> ${person.address.name} <hr> <!-- 在jsp頁面中,使用el表示式獲取list集合中指定位置的資料 --> <% Person p1 = new Person(); p1.setName("tom"); Person p2 = new Person(); p2.setName("tom"); List<Person> list = new ArrayList<Person>(); 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","a"); map.put("b","b"); map.put("c","c"); map.put("1","a"); 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、執行運算
<%@page import="com.web.el.User"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="
PageContext pageContext | 是JSP頁面的上下文物件,代表了JSP頁面 |
Map pageScope | 封裝了pageContext域物件的資料 |
Map requestScope | 封裝了request域物件的資料 |
Map sessionScope | 封裝了session域物件的資料 |
Map applicationScope | 封裝了application域物件的資料 |
Map param | 封裝了表單提交的資料,Map的value型別是String |
Map paramValues | 封裝了表單提交的資料,Map的value型別是String |
Map header | 封裝了請求頭,Map的value型別是String |
Map headerValues | 封裝了請求頭,Map的value型別是String[] |
Map cookie | 封裝了客戶端帶來的cookie |
Map initParam | 封裝了WEB應用的初始化引數 |