1. 程式人生 > 實用技巧 >el語句基本用法

el語句基本用法

EL(Expression Language)


一、EL操作符

語法:${EL表示式}
  • 1
  1. .”操作符
    用來訪問物件的某個屬性,如${user.name}。

  2. “[ ]”操作符
    也可用來訪問物件的某個屬性,如${user[‘name’]}。

    “[ ]”操作符其他功能:

    (1)當屬性名中包含特殊字元如“.”或“-”等的情況下,就不能使用“.”操作符來訪問,這時只能使用“[ ]”操作符。

    (2)根據索引值訪問陣列中的元素使用“[ ]”操作符,如${arr[1]}。

    (3)使用變數實現動態訪問,如${user[x]},x是一個變數,改變x即可。


1.1、算術操作符

這裡只測試了“+”操作符,“-”、“*”、“/”或div、“%”或mod請自行測試。

<!-- “+”操作符 -->
${a1+a2+a3 }<br><!-- 輸出:60 -->
${1+1 }<br><!-- 輸出:2 -->
${'1'+1.1 }<br><!-- 輸出:2.1 -->
${"1"+1 }<br><!-- 輸出:2 -->
${bbbbbsdcksnvjnds+1 }<br><!-- 輸出:1 -->
\${"bbbbbsdcksnvjnds"+1 }<!-- 報異常 -->

1.2、關係操作符

1.3、邏輯操作符

1.4、empty操作符

<!-- empty操作符 -->
${empty s }<br><!-- 輸出:true -->
${!empty s }<br><!-- 輸出:false -->
${not empty s }<br><!-- 輸出:false -->
${!not empty s }<br><!-- 輸出:true -->

總結:若變數 s為null,或長度為零的String,或size為零的集合,則
${ empty s }返回的結果為true,
${ not empty s }或${ ! empty s }返回的結果為false。


二、EL內建隱式物件


2.1、EL內建物件之域物件

<%
    pageContext.setAttribute("a", "1");
    request.setAttribute("a", "2");
    session.setAttribute("a", "3");
    application.setAttribute("a", "4");
%>

${pageScope.a }<!-- 輸出:1 -->
${requestScope.a }<!-- 輸出:2 -->
${sessionScope.a }<!-- 輸出:3 -->
${applicationScope.a }<br><!-- 輸出:4 -->
${a }<!-- 輸出:1 -->

【總結】:${a }底層使用pageContext.findAttribute(“a”),依次從page、request、session、application的域範圍中尋找”a”屬性,如果都沒有則返回null 。


2.2、EL內建物件之param、paramValues(請求引數物件)

<!-- 這裡使用get的提交方式測試,直接在URL中拼接引數。
    (請求路徑:http://localhost:8080/web上下文路徑/index.jsp?name=zhang&hobby=籃球&hobby=足球)
 -->

${param.name }<br><!-- 輸出:zhang -->
${param.hobby }<br><!-- 輸出:籃球 -->
${paramValues.name }<br><!-- 輸出:[Ljava.lang.String;@7c244cff -->
${paramValues.name[0] }<br><!-- 輸出:zhang -->
${paramValues.hobby }<br><!-- 輸出:[Ljava.lang.String;@5ae7ad90 -->
${paramValues.hobby[1] }<br><!-- 輸出:足球 -->

【總結】:
${param.xxx } 相當於reuqest.getParameter(“xxx”);
${paramValues.xxx } 相當於reuqest.getParameterValues(“xxx”);
如果是陣列可以使用下標。


2.3、EL內建物件之header、headerValues(請求頭物件)

${header.accept }<br>
<!-- 輸出:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,
image/apng,*/*;q=0.8 -->

\${header.accept-Encoding }<br>
<!-- 輸出:\${header.accept-Encoding },需要注意(輸出中不會輸出"\",因為我不這樣寫,會直接報
異常),"-"被解析成減號,導致丟擲異常,在語句最前面寫上"\",轉義$符號,就可以將語句原樣輸出 -->

${header['accept-Encoding'] }<br><!-- 輸出:gzip, deflate, br -->
${headerValues['accept-Encoding'] }<br><!-- 輸出:[Ljava.lang.String;@2f08b521 -->
${headerValues['accept-Encoding'][0] }<br><!-- 輸出:gzip, deflate, br -->

2.4、EL內建物件之pageContext物件

${pageContext.request.contextPath }<br><!-- 輸出:/el (這是我的web上下文路徑)-->

【總結】:pageContext物件:封裝了其他8個JSP內建物件,可以任意獲取使用。


2.5、EL內建物件之cookie物件

<!--===================================-->
${cookie }
<!-- 輸出:{JSESSIONID=javax.servlet.http.Cookie@5197416d,
 Webstorm-77d15532=javax.servlet.http.Cookie@3f5b951a, 
 Webstorm-6c1ac651=javax.servlet.http.Cookie@536cda57} -->

2.6、EL內建物件之initParam(全域性初始化引數物件)

<!-- 在web.xml中配置 :
  <context-param>
    <param-name>Encoding</param-name>
    <param-value>UTF-8</param-value>
  </context-param>
  <context-param>
    <param-name>pageSize</param-name>
    <param-value>10</param-value>
  </context-param>
-->
${initParam.Encoding }<br><!-- 輸出:UTF-8 -->
${initParam }<br><!-- 輸出:{pageSize=10, Encoding=UTF-8} -->

三、EL獲取資料例項

3.1、EL獲取域中屬性

<%
    String str = "hello";
    pageContext.setAttribute("str", str); 
%>
${pageScope.str }<br><!-- 輸出:hello -->
${str }<br><!-- 輸出:hello -->

3.2、EL獲取陣列元素

<%
String[] s = {"zhang","xiao","hu"}; 
pageContext.setAttribute("s", s); 
%>
${pageScope.s }<br><!-- 輸出:[Ljava.lang.String;@1d78464e -->
${pageScope.s[2] }<br><!-- 輸出:hu -->

3.3、EL獲取 List<String> 中的資料

<%
List<String> list = new ArrayList<String>();
list.add("zhang");
list.add("xiao");
list.add("hu");
pageContext.setAttribute("list", list); 
%>
${list }<br><!-- 輸出:[zhang, xiao, hu] -->
${list[1] }<br><!-- 輸出:xiao -->

3.4、EL獲取 Map<String, Integer> 中的資料

<%
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("zhang",1);
map.put("xiao",2);
map.put("hu",3);
pageContext.setAttribute("map", map); 
%>
${map }<br><!-- 輸出:{xiao=2, zhang=1, hu=3} -->
${map.zhang }<br><!-- 輸出:1 -->

3.5、EL獲取 Map<String, JavaBean> 中的資料

<%Map<String, User> umap = new HashMap<String, User>();
umap.put("user1", new User("zhang",18));
umap.put("user2", new User("xiao",36));
pageContext.setAttribute("umap", umap); 
%>
${umap }<br><!-- 輸出:{user1=User [name=zhang, age=18], user2=User [name=xiao, age=36]} -->
${umap.user2 }<br><!-- 輸出: User [name=xiao, age=36] -->
${umap.user1.age }<br><!-- 輸出:18 -->
${umap['user2'].name }<br><!-- 輸出:xiao 需注意,這種方式要求map的key必須是String型別-->
${umap['user2']['name'] }<br><!-- 輸出:xiao -->
${umap['user2']['age'] }<br><!-- 輸出:36 -->
${umap['user2'][age] }<br><!-- 不會報錯,但什麼也獲取不到 -->

轉自:https://blog.csdn.net/hu1010037197/article/details/80214637