EL表達式常見用法詳解

1.EL表達式的簡介
EL表達式是一種JSP技術,能夠代替JSP中原本要用Java語言進行顯示的語句,使得代碼更容易編寫與維護。最基本的語法是${express}。
2.獲取並顯示數據
1)從四個域中通過key找到簡單數據並顯示出來。表達式代碼:
${name}      <!-- 類比於<%=pageContext.findAttribute("name") %> -->  
四個域的尋找順序是 page -> request -> session -> application。用EL表達式還有個好處,若找不到鍵值爲name的屬性值,不會顯示null,會顯示空字符串。若是確定鍵值是在request域中,則可以用如下EL表達式代碼:
${requestScope.name}  
2)從存儲在WEB域中的封裝了數據的JavaBean中得到對象的某個屬性值並顯示出來。
<%  
    Person p = new Person();  
    Address address = new Address();  
    address.setCity("浙江");//Adress類中有個私有String屬性爲city  
    p.setName("mike");//Person類中有私有String屬性爲name  
    p.setAddress(address);//Person類中有私有Adress屬性爲address  
    session.setAttribute("person", p);//存入sessionScope  
%>  
${person.name}<!-- 從WEB域中找到鍵值爲person的對象,然後再person對象中找到name屬性 -->  
${person.address.city}  

${person['name']}<!-- 也可以用[]方式 -->  
${person['address']['city']}  
除了用.方式獲得對象的屬性,也可以用[ ]方式,當然遇到鍵值名字中有-的,如mike-abc,或者key值爲數字開頭,則只能用[ ]方式。

3)從List集合對象中獲取某個值並顯示。
<%  
    List<Person> list = new ArrayList<Person>();  
    list.add(new Person("kkk"));  
    list.add(new Person("sss"));  
    list.add(new Person("jjj"));  
    application.setAttribute("list_1", list);  
%>  
${list_1[1].name }  

4)從Map中獲取某個值並顯示。
<%  
    Map map = new HashMap();  
    map.put("a", new Person("aaa"));  
    map.put("b", new Person("bbb"));  
    map.put("1", new Person("ccc"));  
    request.setAttribute("map", map);  
%>  
${map['1'].name }<!-- 是數字的話只能用括號,就算put進去的key值是字符串類型-->  
${map.a.name }  

3.執行運算
1)語法:${運算表達式}
2)常見運算符:==(或eq)   !=(或ne)    <(或lt)    >(或gt)    <=(或le)    >=(或ge)    &&(或and)   ||(或or)   !(或not)
3)判斷是否爲空:${empty name }
若變量a爲null,或長度爲零的String,或size爲零的集合則${empty a}返回結果爲true
${not empty a}或${!empty a}返回結果爲false
4)三目運算符:${name == null?"null":name }

4.獲取常用對象
1)語法:${隱式對象名稱}
2)隱式對象表
對象名
用法
等價JSP代碼或作用
param
${param.name}
request.getParameter(name)
paramValues
${paramValues.name}
request.getParameterValues(name)//返回一個字符串數組
header
${header.name}
request.getHeader(name)
headerValues
${headerValues.name}
request.getHeaderValues(name)
cookie
${cookie.name.value}
request.getCookie()
initParam
${initParam.name}
ServletContext.getInitparameter(name)
pageContext
${pageContext.request.contextPath}
獲取WEB應用名
pageContext
${pageContext.request.sessionid}
獲取sessionId
pageContext
${pageContext.request.remoteAddr}
獲取主機名

5.EL表達式原理及注意點
原理:EL表達式在獲取某個對象的屬性值時,先將某個屬性值首字母變成大寫,然後加上get前綴,拼接成getter方法,通過反射將該對象構建出來,然後再對該對象執行getter方法,這與私有屬性並沒有關係,所以要注意,JavaBean的屬性名要小寫,且要有getter方法,不然會報錯。

6.EL表達式總結
01.EL表達式用來替代JSP頁面中數據訪問時的複雜編碼
02.EL可以通過變量名取值、獲取對象的屬性值、獲取集合元素、執行表達式
03.EL飲食對象 有三種分別是作用域訪問對象、參數訪問對象、JSP隱式對象

EL表達式無法使用的解決方法
有時候我們在新建一個項目後,在JSP頁面內寫EL表達式,如:
${1 + 1}  
結果就顯示“ ${1 + 1} ”,而不是顯示2,可能有兩種原因:
1.JSP頁面指令中禁用了EL表達式,將JSP頁面開頭加上如下指令:
<%@ page isELIgnored="false" %>  
2.web.xml中的<web-app>中沒有指定JSP和Servlet的版本,將<web-app>標籤換成如下:
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章