JSP用於在網頁上顯示動態內容,通常需要在JSP頁面中嵌 入Java指令碼以完成複雜功能。但大量的Java指令碼使得JSP頁面難以維護。一種類似JavaScript語言—JSP運算式語言可用於在網頁上產生動 態內容,並代替JSP指令碼元素(運算式、Script、聲明),EL運算式可用於所有的HTML和JSP標籤中。
EL運算式文法:
${ EL expression}
其中:
$表示EL運算式的開始。
EL expression指定運算式。 一、JSP EL運算式可用於如下幾種方式。
1 靜態文本:包含EL運算式,其值在運行時計算出來。
如: ${8+5}
2 標準標籤和自訂標籤屬性:協助顯示網頁上的動態內容。
JSP提供一些標準標籤,<jsp:useBean>、<jsp:include>等。自訂標籤是由使用者使用taglib指令編寫的。
EL運算式可以作為一個值傳遞給上述標籤的屬性。運算式在運行時計算,結果值將作為屬性值進行傳遞。
如:
<%
pageContext.setAttribute("color","#ffccff");
%>
<body bgcolor="${pageScope.color}">
7+8=${7+8}
</body>
3 JavaBean與EL運算式:使用EL運算式可以簡潔地讀出JavaBean的屬性值。
傳統的JSP通常使用如下方法訪問JavaBean:
<jsp:getProperty name=”myBean” property=”name”/>
<%=myBean.getName()%>
EL運算式則簡化為:
${myBean.name}
二、啟用/禁用EL運算式
<%@ page isELIgnored=”true|false” %>
為true時,支援EL運算式計算。
為false時,不支援EL運算式計算。
三、變數
JSP運算式${product}的計算結果與調用pageContext.findAttribute(“product”)一樣,EL運算式中的變數可以引用儲存在標準範圍(如:page request session application)中的屬性。
點運算子(.)和”[]”用於擷取變數的值。
如:a.identifier-b與expr-a[identifier-b]等價。
四、隱式對象
JSP隱式對象是一組標準的類。在JSP EL定義了如下隱式對象:
1 pageContext:提供對頁面屬性的訪問。通過pageContext對象可以訪問和使用下列對象。
2 request:表示接受的用戶端的JSP頁面請求。請求的資訊可以使用request對象來訪問。如:${pageContext.request.contextPath}返回請求的上下文路徑。
3 param:返回將請求參數名映射至單個字串值的值。如:${param[“name”]}
4 paramValues:返回映射至用戶端的請求參數的一組值。
5 pageScope:返回頁面範圍的變數名,這些名稱已映射至相應的值。
6 requestScope:提供對請求對象的屬性的存取權限。
7 sessionScope:返回會話範圍內的變數名。
8 applicationScope: 返順應用程式範圍內抽變數名。
五、文字常量
JSP運算式語言定義了下列文字常量:
1 布爾型:true或false。
2 整型:與Java中的整型相同。
3 浮點型:與Java中的浮點型相同。
4 字串型:用單引號或雙引號引起。
5 null:表示沒有值。0和Null 字元串表示的不是null值。
六、運算子
點運算子(.)和”[]”用於擷取變數的值。
!或not 布爾值取反
empty 檢查空值
* 乘法
/或div 除法
%或mod 求餘數或模數
+ 加
- 減
<或lt 小於
>或gt 大於
<=或le 小於等於
>=或ge 大於等於
==或eq 等於
!=或ne 不等於
&&或and 邏輯與
||或 or 邏輯或
num1?num2:result 條件運算子
=================================================================
[size=large]EL運算式 動態表格式資料加序號
<c:forEach var="zb" items="${list}" varStatus="index">
${index.count}
</c:forEach>
================================================================
定義頁面變數,自增
<c:set value="0" var="i" scope="page"/><c:forEach var="fb" items="${FB}" varStatus="index">
<tr><td width="10%" align="center"><c:if test="${!empty fb.sfbz}">
<c:set value="${pageScope.i + 1}" var="i" scope="page"/>
<c:out value="${pageScope.i }"/></c:if>
</td> <td width="40%">
${fb.xmmc}
</td>
<td width="40%">
${fb.sfbz}
</td>
</tr>
</c:forEach>
==================================================================
格式化時間
<fmt:formatDate value="${yxqjz}" pattern="yyyy-MM-dd" />
<fmt:formatDate value="${zxyprice.startdate2}" type="date" dateStyle="medium"/>
====================================================================
跨行
<c:if test="${status.index == 0}" >
<td rowspan="${size}">1月</td>
</c:if>
=====================================================================
<script type="text/javascript">
<!--
var TabbedPanels1 = new Spry.Widget.TabbedPanels("TabbedPanels1");
TabbedPanels1.showPanel(${tabId});
//-->
</script>
<div id="TabbedPanels1" class="TabbedPanels">
<ul class="TabbedPanelsTabGroup">
<li class="TabbedPanelsTab" tabindex="0" style="font-size:12px;background-color:#DED465;">
工作計劃
</li>
</ul>
</div>