標籤:
EL運算式
EL即Expression Language,主要的任務是協助開發人員簡化擷取域屬性。
但是一般情況下需要使用EL和JSTL結合使用。
文法:
${
// 隱含對象|直接寫域中的屬性
}
? 算術運算<!-- 算術運算 --> 20+10 = ${ 20+10 } <br/> 20-10 = ${ 20-10 } <br/> 20*10 = ${ 20*10 } <br/> 20/10 = ${ 20/10 } <br/> 20%10 = ${ 20%10 } <br/>
? 比較運算 <!-- 比較運算 --> 20 > 10 = ${ 20 > 10 } <br/> 20 < 10 = ${ 20 < 10 } <br/> 20 >= 10 = ${ 20 >= 10 } <br/> 10 == 10 = ${ 10 == 10 } <br/> ${ str == null }
? 三目運算子${ name != null ? "歡迎":"註冊"}
? 邏輯運算${ 12>10 && 1<2 }<br/>
一 擷取域對象(重點)
1. 普通資料
<!-- 擷取普通屬性 --> <% request.setAttribute("name","jack"); %> ${name}<br/>
以上的代碼在擷取域屬性的時候沒有指定給任何的域空間,那麼底層一定按照小到大的方式逐一的檢測的域屬性。
pageContext.findAttribute(“”); à 實現原理
2 擷取數組屬性
<!-- 擷取數組屬性 --> <% int [] ins = {1,2,3,4}; request.setAttribute("arrs",ins); %> ${arrs}<br/> ${arrs[2]}<br/> ${arrs["2"]}<br/> ? 該方式不是給數組用,是個集合使用。
3 List集合
<!-- 擷取數組屬性 --> <% List<String> list = new ArrayList<String>(); list.add(0,"jiao"); list.add(1,"ning"); list.add(2,"bo"); request.setAttribute("list",list); %> ${list }<br/> ${list[0] }<br/> ${list["0"] }<br/>
4 擷取Map屬性
<% LinkedHashMap<String,String> map = new LinkedHashMap<String,String>(); map.put("001","ooooo"); map.put("002","fffff"); map.put("003","uuuuu"); request.setAttribute("map",map); %> ${map }<br/> ${map[001] }<br/> ${map["001"] }<br/> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <c:forEach items="${map}" var="entry"> ${entry.key } = ${entry.value }<br/> </c:forEach>
6 Bean操作
<!-- 擷取Map中Bean屬性 --> <% LinkedHashMap<String,Cat> cats = new LinkedHashMap<String,Cat>(); cats.put("001",new Cat("A貓",3,"波斯貓")); cats.put("002",new Cat("B貓",3,"狸貓")); cats.put("003",new Cat("C貓",3,"加菲貓")); request.setAttribute("cats",cats); %> <c:forEach items="${cats}" var="entry"> ${entry.key} = ${entry.value.name } , ${entry.value.age },${entry.value.type }<br/> </c:forEach>
7 EL隱含對象
pageScope
requestScope
sessionScope
applicationScope
如果在擷取域屬性的時候沒有指定具體的域,那麼逐一的尋找比較耗時,因此希望大家在明確網域名稱的時候一定要指定網域名稱。
pageContext 該對象可以擷取request對象
舉例:
<!-- 隱含對象 --> ${pageContext.request.method }<br/> ${pageContext.request.servletPath }<br/> ${pageContext.request.contextPath }<br/> ${pageContext.request.protocol }<br/>
擷取請求參數paramparamValues
舉例:${param.name }<br/>${paramValues.likes[0] }<br/>
擷取要求標頭資訊headerheaderValues
舉例:${header["accept"] }<br/>initParam
擷取Cookiecookie
舉例:${cookie }<br/>${cookie.address }<br/>${cookie.address.name }<br/>${cookie.address.value }<br/>EL和函數庫
問題:在資料顯示的時候經常需要調用一些方法對需要顯示的資料進行基本的處理,如:
資料過濾、求子串等操作。那麼就需要使用EL運算式進行快速的函數調用。
- 引入HTMLFilter.java類
- 描述為函數
2.1 在WEB-INF中建立一個myfun.tld檔案
<?xml version="1.0" encoding="UTF-8"?><taglib 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-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <short-name>jnb</short-name> <function> <name>filter</name> <function-class>cn.itcast.utils.HTMLFilter</function-class> <function-signature>java.lang.String filter(java.lang.String)</function-signature> </function></taglib>
2.2 引入函數庫
%@taglib uri="/WEB-INF/myfuns.tld" prefix="jnb"%
1.2 使用EL調用函數
<td>${jnb:filter(entry.value.info)}</td>
注意:
- EL運算式中不能繼續嵌套EL運算式
- 定義函數的時候函數必須是靜態。
總結
JSTL總過有5個庫,但是由於JSP主要是做資料顯示的,因此我們只學習核心庫和函數庫。
java學習筆記—EL運算式(38)