EL表達(dá)式簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
JSP頁(yè)面中支持使用EL表達(dá)式,EL全名為Expression Language。EL表達(dá)式的主要作用有:
① 獲取數(shù)據(jù);
?、?執(zhí)行運(yùn)算;
?、?使用EL表達(dá)式的11大隱式對(duì)象;
?、?調(diào)用Java方法。
當(dāng)然,EL表達(dá)式還能配合JSTL標(biāo)簽,進(jìn)行其他一些功能的顯示,例如迭代等等。
我們先來(lái)看使用EL表達(dá)式來(lái)獲取數(shù)據(jù)
在JSP頁(yè)面中使用${標(biāo)識(shí)符}的形式,就是通知JSP引擎在Servlet中調(diào)用pageContext.findAttribute(“標(biāo)識(shí)符”)來(lái)獲取數(shù)據(jù),具體是以標(biāo)識(shí)符作為關(guān)鍵字從各個(gè)域中來(lái)尋找對(duì)象或?qū)傩?。如果找到,則以字符串形式返回顯示在JSP頁(yè)面上,如果沒(méi)找到則以空字符串””顯示,這一點(diǎn)跟<jsp:getProperty>標(biāo)簽不一樣,也說(shuō)明了EL表達(dá)式比這個(gè)標(biāo)簽要好用。
例1:獲取域中的普通數(shù)據(jù)
<% String name = "Ding"; request.setAttribute("personName", name); %> ${personName }
瀏覽器中觀察:
例2:獲取域中的對(duì)象或?qū)傩?/p>
<% Person p = new Person("Ding",25); request.setAttribute("person", p); %> ${person } <br> ${person.name } <br>
瀏覽器中觀察:
例3:獲取對(duì)象中的對(duì)象的屬性
在domain包中的兩個(gè)JavaBean:
public class Person { private String name; private int age; private Address address; 。。。省略各個(gè)屬性的get和set方法 } public class Address { private String city; 。。。省略city屬性的get和set方法 }
在JSP頁(yè)面中代碼為:
<% Person p = new Person(); Address a = new Address(); a.setCity("Amoy"); p.setAddress(a); request.setAttribute("person", p); %> ${person.address.city }
在瀏覽器中觀察:
注意:這種對(duì)象中屬性還是對(duì)象的,要特別注意屬性的名稱一定在JSP上表現(xiàn)一致,否則會(huì)拋出異常。
例3-2:在web工程中使用EL表達(dá)式來(lái)獲取當(dāng)前web工程路徑
${pageContext.request.contextPath}
該EL表達(dá)式的值為:
注意,該表達(dá)式顯示的最前面就已經(jīng)有一個(gè)斜杠了”/”。這里在EL表達(dá)式中的“pageContext”是EL中的一個(gè)隱式對(duì)象,具體請(qǐng)看下一篇博客。
例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 }
在瀏覽器中觀察:
可以看到除了用”.”來(lái)取得屬性或者M(jìn)ap集合中key對(duì)應(yīng)的值,還可以使用”[‘標(biāo)識(shí)符']”來(lái)獲取(注意中括號(hào)中有單引號(hào)),這個(gè)尤其在標(biāo)識(shí)符為數(shù)字的情況下,使用”.”會(huì)報(bào)錯(cuò),而使用”[‘標(biāo)識(shí)符']”則不會(huì)報(bào)錯(cuò)。
注意,EL表達(dá)式能獲取對(duì)象的屬性是因?yàn)樵搶?duì)象中的字段提供了get方法,所以成為了屬性,EL僅能獲取對(duì)象的屬性,而不能獲取對(duì)象的字段,這一點(diǎn)要明確。
EL表達(dá)式的不足:無(wú)論是從List集合還是從Map集合中,都無(wú)法使用EL表達(dá)式來(lái)迭代集合,因此如果需要迭代集合,需要EL表達(dá)式配合JSTL標(biāo)簽使用。
EL表達(dá)式支持運(yùn)算,不管是算術(shù)運(yùn)算、邏輯運(yùn)算還是關(guān)系運(yùn)算:
語(yǔ)法:${運(yùn)算表達(dá)式}
(此處省略算術(shù)運(yùn)算符)
例6:
<% request.setAttribute("username", "root"); request.setAttribute("password", "123"); %> ${username == "root" && password == "123" }
瀏覽器上顯示:true。
除了上述三種簡(jiǎn)單的運(yùn)算符外,EL表達(dá)式還支持 empty運(yùn)算符和二元表達(dá)式(表達(dá)式?值1:值2)
empty運(yùn)算符:檢測(cè)對(duì)象是否為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>
瀏覽器中觀察:
二元表達(dá)式:
例8:
<% User user = new User(); user.setUsername("fjdingsd"); pageContext.setAttribute("user", user); %> 歡迎您:${user!=null ? user.username : '' }
瀏覽器中觀察:
上面這個(gè)例子使用EL表達(dá)式的二元表達(dá)式,如果user對(duì)象不為null,則輸出該對(duì)象中的username屬性,否則輸出空字符。
二元表達(dá)式的另一種用途還可以用來(lái)做數(shù)據(jù)回顯,假設(shè)有一個(gè)用戶要修改其注冊(cè)信息,那么服務(wù)器(或從數(shù)據(jù)庫(kù))在返回其數(shù)據(jù)到顯示頁(yè)面時(shí),應(yīng)該在他編輯過(guò)的信息重新顯示出來(lái)。
例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':'' }>女
瀏覽器中顯示:
- El表達(dá)式使用問(wèn)題javax.el.ELException:Failed to parse the expression的解決方式
- EL表達(dá)式的隱式對(duì)象_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- JSP中EL表達(dá)式用法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- 淺談java里的EL表達(dá)式在JSP中不能解析的問(wèn)題
- JAVA JSP頁(yè)面技術(shù)之EL表達(dá)式整理歸納總結(jié)
- Javaweb El表達(dá)式實(shí)例詳解
- Java后端用EL表達(dá)式改進(jìn)JSP
相關(guān)文章
基于SpringBoot實(shí)現(xiàn)定時(shí)發(fā)送郵件過(guò)程解析
這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)定時(shí)發(fā)送郵件過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06IDEA生成patch和使用patch的方法實(shí)現(xiàn)
比如你本地修復(fù)的 bug,需要把增量文件發(fā)給客戶,很多場(chǎng)景下大家都需要手工整理修改的文件,并整理好目錄,這個(gè)很麻煩,那有沒(méi)有簡(jiǎn)單的技巧呢?本文主要介紹了IDEA生成patch和使用patch的方法實(shí)現(xiàn),感興趣的可以了解一下2023-08-08聊聊SpringMVC項(xiàng)目依賴和靜態(tài)資源導(dǎo)出問(wèn)題
這篇文章主要介紹了SpringMVC項(xiàng)目依賴和靜態(tài)資源導(dǎo)出問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12Java數(shù)據(jù)結(jié)構(gòu)和算法之冒泡排序(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
冒泡排序(Bubble Sort)是一種簡(jiǎn)單的排序算法。本文重點(diǎn)給大家介紹java數(shù)據(jù)結(jié)構(gòu)和算法之冒泡排序,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-04-04詳解如何獲取PreparedStatement參數(shù)示例詳解
這篇文章主要為大家介紹了詳解如何獲取PreparedStatement參數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09SpringBootTest單元測(cè)試報(bào)錯(cuò)的解決方案
這篇文章主要介紹了SpringBootTest單元測(cè)試報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09關(guān)于IDEA報(bào)錯(cuò)Error:java 不支持發(fā)行版本17的原因及解決方案
在rebuild或運(yùn)行項(xiàng)目時(shí)提示“Error:java: 錯(cuò)誤: 不支持發(fā)行版本 17”,本文將給大家介紹了IDEA提示“Error:java: 錯(cuò)誤: 不支持發(fā)行版本17”的原因及解決方案,需要的朋友可以參考下2023-09-09