EL表達式應與JSTL配合使用,但EL表達式在JSP2.0,servlet2.4以上可以單獨使用。
EL表達式的基本形式爲:
${ expression }
expression可以爲page,request,session,application域內的變量,集合,或算術邏輯運算。EL運算符有 +, - , * ,/ 或
div , % 或 mod , == 或 = , = 或 ne , < 或 lt , > 或 gt , <= 或 le , >= 或 ge , && 或 and , || 或 or , ! 或 not , empty (
測試是否爲空如:${empty expression} 結果爲true/false), a?b:c。
(1)對存儲對象的訪問
若要輸出作用域變量saleItem(通過setAttribute方法存儲在page,request,session,application作用域內的變量
)的變量:${saleItem},若知道saleItem在request作用域內還可以如此訪問:${requestScope.saleItem}。若不指定作用域
則默認在EL四個隱含對象pageScope,requestScope,sessionScope,applicationScope作用域中按順序查找。
(2)對javaBean屬性的簡化記法
要輸出作用域變量company的companyName(在javaBean類定義中必須存在getCompanyName()方法纔可訪
問)屬性:${company.companyName}。要訪問company的president 屬性的firstName(存在相應的getXXX()方法)屬性:
${company.president.firstName}。
(3)對集合或數組的訪問
要訪問數組,List,Map中的元素爲:${variable[index/key]}。
JSTL
一. 配置 JSTL
包括兩個 JAR 文件, jstl.jar 和 standard.jar 。
原文引入:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
二.JSTL的標籤庫
核心標籤庫core
(1)<c:out value = "expression" [default = "expression"] [escapeXml = "true/false"]/>或
<c:out value = "expression" [escapeXml = "true/false"]>
default value
</c:out>
value爲輸出表達式,當value爲空又設置了default時輸出默認值default的內容,escapeXml爲是否照原樣輸出
而忽略html標籤代碼默認爲true.
(2)<c:set var = "name" [scope = "page/request/session/application"] value = "expression"/> 或
<c:set var = "name" [scope = "page/request/session/application"] >
value
</c:set>
此表達式爲在相應的作用域內申明一個name的變量,其值爲value的內容.
(3)<c:remove var = "name" [scope = "page/request/session/application"] />
此表達式爲在相應的作用域內刪除name變量.
(4)<c:catch var = "name" [scope = "page/request/session/application"]>...</c:catch>
捕獲異常,並用name標示此異常.
(5)流程控制:
條件控制標籤:
1. c:if
<c:if test = "expression" var = "varName" scope = " "></c:if>
test爲測試表達式,var表示test運行後的結果,類型爲String值爲true/false,scope爲var的存儲範圍。
2. c:choose
<c:choose>
<c:when test = "expression">
...
</c:when>
<c:when test = "expression">
...
</c:when>
<c:otherwise>
...
</c:otherwise>
</c:choose>
可以有一個或多個<c:when></c:when>但只能有0個或一個<c:otherwise></c:otherwise>且只能放
在<c:when></c:when>後面。
循環控制標籤:
1. c:forEach
格式一:集合或數組的迭代
<c:forEach [var = "varName"]
items = "collection/arrays"
[varStatus = "varStatusName"]
[begin = " "]
[end = " "]
[step = " " ]>
....
</c:forEach>
items爲被循環的集合或數組,var用來存儲當前被訪問的變量,varStatus爲當前的循環狀態,begin爲開始位置,
end爲結束位置,step爲步長。
格式二:一般的迭代
<c:forEach [var = "varName"]
[varStatus = "varStatusName"]
begin = " "
end = " "
[step = " "]>
...
</c:forEach>
2. c:forTokens
一般用來字符串的循環。
<c:forTokens items = "String"
delims = ",/ "
[var = "varName"]
[varStatus = "varStatusName"]
[begin = " "]
[end = " "]
[step = " "]>
...
<c:forTokens>
delims爲字符串分隔符逗號、空格等等。
(6)URL標籤:
<c:import url = " url" [context = " "] [var = "varName"] [scope = "scope"] [charEncoding = " "] />
<c:redirect url = "url" [context = " "] />或
<c:redirect url = "url" [context = " "] >
<c:param name = " " value = " "/>
</c:redirect>
<c:param name = " " value = " "/>