EL表達式簡介_動力節(jié)點Java學(xué)院整理
JSP頁面中支持使用EL表達式,EL全名為Expression Language。EL表達式的主要作用有:
① 獲取數(shù)據(jù);
?、?執(zhí)行運算;
?、?使用EL表達式的11大隱式對象;
?、?調(diào)用Java方法。
當(dāng)然,EL表達式還能配合JSTL標簽,進行其他一些功能的顯示,例如迭代等等。
我們先來看使用EL表達式來獲取數(shù)據(jù)
在JSP頁面中使用${標識符}的形式,就是通知JSP引擎在Servlet中調(diào)用pageContext.findAttribute(“標識符”)來獲取數(shù)據(jù),具體是以標識符作為關(guān)鍵字從各個域中來尋找對象或?qū)傩?。如果找到,則以字符串形式返回顯示在JSP頁面上,如果沒找到則以空字符串””顯示,這一點跟<jsp:getProperty>標簽不一樣,也說明了EL表達式比這個標簽要好用。
例1:獲取域中的普通數(shù)據(jù)
<%
String name = "Ding";
request.setAttribute("personName", name);
%>
${personName }
瀏覽器中觀察:
例2:獲取域中的對象或?qū)傩?/p>
<%
Person p = new Person("Ding",25);
request.setAttribute("person", p);
%>
${person } <br>
${person.name } <br>
瀏覽器中觀察:

例3:獲取對象中的對象的屬性
在domain包中的兩個JavaBean:
public class Person {
private String name;
private int age;
private Address address;
。。。省略各個屬性的get和set方法
}
public class Address {
private String city;
。。。省略city屬性的get和set方法
}
在JSP頁面中代碼為:
<%
Person p = new Person();
Address a = new Address();
a.setCity("Amoy");
p.setAddress(a);
request.setAttribute("person", p);
%>
${person.address.city }
在瀏覽器中觀察:
注意:這種對象中屬性還是對象的,要特別注意屬性的名稱一定在JSP上表現(xiàn)一致,否則會拋出異常。
例3-2:在web工程中使用EL表達式來獲取當(dāng)前web工程路徑
${pageContext.request.contextPath}
該EL表達式的值為:

注意,該表達式顯示的最前面就已經(jīng)有一個斜杠了”/”。這里在EL表達式中的“pageContext”是EL中的一個隱式對象,具體請看下一篇博客。
例4:取出List集合中的元素
<%
List<Person> personList = new ArrayList<Person>();
personList.add(new Person("Ding",25));
personList.add(new Person("LRR",24));
request.setAttribute("persons",personList);
%>
${persons[0].name } love ${persons[1].name}
瀏覽器中觀察:

例5:取出Map集合中的元素
<%
Map<String,Person> personMap = new HashMap<String,Person>();
personMap.put("p1",new Person("Ding",25));
personMap.put("p2",new Person("LRR",24));
request.setAttribute("pMap", personMap);
%>
${pMap.p1.name } <br>
love <br>
${pMap['p2'].name }
在瀏覽器中觀察:

可以看到除了用”.”來取得屬性或者Map集合中key對應(yīng)的值,還可以使用”[‘標識符']”來獲取(注意中括號中有單引號),這個尤其在標識符為數(shù)字的情況下,使用”.”會報錯,而使用”[‘標識符']”則不會報錯。
注意,EL表達式能獲取對象的屬性是因為該對象中的字段提供了get方法,所以成為了屬性,EL僅能獲取對象的屬性,而不能獲取對象的字段,這一點要明確。
EL表達式的不足:無論是從List集合還是從Map集合中,都無法使用EL表達式來迭代集合,因此如果需要迭代集合,需要EL表達式配合JSTL標簽使用。
EL表達式支持運算,不管是算術(shù)運算、邏輯運算還是關(guān)系運算:
語法:${運算表達式}


(此處省略算術(shù)運算符)
例6:
<%
request.setAttribute("username", "root");
request.setAttribute("password", "123");
%>
${username == "root" && password == "123" }
瀏覽器上顯示:true。
除了上述三種簡單的運算符外,EL表達式還支持 empty運算符和二元表達式(表達式?值1:值2)
empty運算符:檢測對象是否為null或某數(shù)據(jù)是否為””空字符串
例7:
<%
request.setAttribute("person", null);
request.setAttribute("address", "");
request.setAttribute("user", new User());
%>
${empty(person)} <br>
${empty(address)} <br>
${empty(user)} <br>
瀏覽器中觀察:
二元表達式:
例8:
<%
User user = new User();
user.setUsername("fjdingsd");
pageContext.setAttribute("user", user);
%>
歡迎您:${user!=null ? user.username : '' }
瀏覽器中觀察:
上面這個例子使用EL表達式的二元表達式,如果user對象不為null,則輸出該對象中的username屬性,否則輸出空字符。
二元表達式的另一種用途還可以用來做數(shù)據(jù)回顯,假設(shè)有一個用戶要修改其注冊信息,那么服務(wù)器(或從數(shù)據(jù)庫)在返回其數(shù)據(jù)到顯示頁面時,應(yīng)該在他編輯過的信息重新顯示出來。
例9:
<%
request.setAttribute("gender", "female");
%>
<input type="radio" name="gender" value="male" ${gender=='male'?'checked':'' }>男
<input type="radio" name="gender" value="female" ${gender=='female'?'checked':'' }>女
瀏覽器中顯示:

相關(guān)文章
基于SpringBoot實現(xiàn)定時發(fā)送郵件過程解析
這篇文章主要介紹了基于SpringBoot實現(xiàn)定時發(fā)送郵件過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06
IDEA生成patch和使用patch的方法實現(xiàn)
比如你本地修復(fù)的 bug,需要把增量文件發(fā)給客戶,很多場景下大家都需要手工整理修改的文件,并整理好目錄,這個很麻煩,那有沒有簡單的技巧呢?本文主要介紹了IDEA生成patch和使用patch的方法實現(xiàn),感興趣的可以了解一下2023-08-08
聊聊SpringMVC項目依賴和靜態(tài)資源導(dǎo)出問題
這篇文章主要介紹了SpringMVC項目依賴和靜態(tài)資源導(dǎo)出問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12
Java數(shù)據(jù)結(jié)構(gòu)和算法之冒泡排序(動力節(jié)點Java學(xué)院整理)
冒泡排序(Bubble Sort)是一種簡單的排序算法。本文重點給大家介紹java數(shù)據(jù)結(jié)構(gòu)和算法之冒泡排序,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧2017-04-04
詳解如何獲取PreparedStatement參數(shù)示例詳解
這篇文章主要為大家介紹了詳解如何獲取PreparedStatement參數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
關(guān)于IDEA報錯Error:java 不支持發(fā)行版本17的原因及解決方案
在rebuild或運行項目時提示“Error:java: 錯誤: 不支持發(fā)行版本 17”,本文將給大家介紹了IDEA提示“Error:java: 錯誤: 不支持發(fā)行版本17”的原因及解決方案,需要的朋友可以參考下2023-09-09

