1. 程式人生 > >JSTL EL表示式

JSTL EL表示式

JSTL (JSP Standard Tag Library ,JSP標準標籤庫)

JSTL標籤庫分為5類:JSTL核心標籤庫、JSTL函式標籤庫、資料庫標籤庫、I18N格式化標籤庫、XML標籤庫。

JSTL的核心標籤庫主要包括:表示式操作、流程控制、迭代操作和URL操作。以下是JSTL常用標籤的用法總結:

一、表示式操作

1、<c:out>
作用:用於顯示資料的內容。
語法1:沒有本體內容
 <c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
語法2:有本體內容
 <c:out value="value" [escapeXml="{true|false}"]>
  default value
 </c:out>
屬性說明:
 value:需要顯示出來的值。
 default:如果value的值為null時,則顯示default指定的值。
 escapeXml:是否轉換特殊字元,預設為true。即預設會將<、>、’、” 和 & 轉換為 &lt;、&gt;、&#039;、&#034和&amp。如果設為false,則不進行轉換。

2、<c:set>
作用:用於將變數的值儲存在JSP範圍中或JavaBean的屬性中。
語法1:將value的值儲存在範圍為scope的varName變數中
 <c:set value="value" var="varName" [scope="{page|request|session|application}"] />
語法2:將本體內容的資料儲存在範圍為scope的varName變數中
 <c:set var="varName"  [scope="{page|request|session|application}"] >
 ...本體內容
 </c:set>
語法3:將value的值儲存在target物件的property屬性中
 <c:set value="value" target="target" property="propertyName" />
語法4:將本體內容的資料儲存在target物件的property屬性中
 <c:set target="target" property="propertyName">
 ...本體內容
 </c:set>
屬性說明:
 value:要被儲存的值。
 var:欲存入的變數名稱。
 scope:var變數的JSP範圍。預設為page範圍。
 target:為一JavaBean或Map物件。

 如果“target”是一個Map,“property”指定的是該Map的一個鍵;如果“target”是一個bean,“property”指定的  是該bean的一個成員欄位。
 如果“target”表示式為null,容器會丟擲一個異常。
 如果“target”表示式不是一個Map或bean,容器會丟擲一個異常。
 如果“target”表示式是一個bean,但是這個bean沒有與“property”匹配的成員欄位,容器會丟擲一個異常。
 property:指定的target物件的屬性。

3、<c:remove>
作用:移除變數。
語法:<c:remove var="varName" [scope="{page|request|session|application}"] />
屬性說明:
 var:要移除的變數。
 scope:var變數所在的JSP範圍,預設為page範圍。

4、<c:catch>
作用:用於處理產生錯誤的異常情況,並將錯誤資訊儲存起來。
語法: <c:catch [var="varName"] >
 ...欲抓取錯誤的部分
 </c:catch>
屬性說明:
 var:將錯誤資訊儲存在指定的變數中,可以通過該變數獲取錯誤資訊。

二、流程控制


1、<c:if>
作用:類似if判斷語句,用於表示式判斷。
語法1:沒有本體內容
 <c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] />
語法2:有本體內容
 <c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"] />
 ...本體內容
 </c:if>
屬性說明:
 test:當該屬性中的表示式運算結果為true,則會執行本體內容,為false則不執行,該標籤必須要有test屬性。
 var:儲存test的運算結果,為true或false。
 scope:var變數的JSP範圍。

2、<c:choose>、<c:when>、<c:otherwise>
作用:這三個標籤必須組合使用,用於流程控制。
範例:
<c:choose> 
<c:when test="${condition1}"> 
condition1為true 
</c:when> 
<c:when test="${ condition2}"> 
condition2為true 
</c:when> 
<c:otherwise> 
condition1和condition2都為false 
</c:otherwise>
</c:choose>  
範例說明:當condition1為true時,會顯示“condition1為true”;當condition1為false且condition2為true時,會顯示“condition2為true”,如果兩者都為false,則會顯示“condition1和condition2都為false”。
注意:若condition1和condition2的運算結果都為true時,此時只會顯示"condition1為true"。
限制說明:
 a、<c:when>和<c:otherwise>標籤必須在<c:choose>和</c:choose>之間使用。
 b、在同一個<c:choose>中,<c:otherwise>必須是最後一個標籤,且只能有一個<c:otherwise>標籤。<c:when>可以有多個。
 c、在同一個<c:choose>中,當所有<c:when>的test都為false時,才執行<c:otherwise>的本體內容。

三、迭代操作

1、<c:forEach>
作用:為迴圈控制,它可以將集合(Collection)中的成員循序瀏覽一遍。運作方式為當條件符合時,就會持續重複執行<c:forEach>的本體內容。
語法1:迭代一個集合物件中的所有成員
 <c:forEach items="collection" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"] />
 ...本體內容
 </c:forEach>
語法2:迭代指定次數
 <c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]> 
 ...本體內容
 </c:forEach> 
屬性說明:
 items:被迭代的集合物件。
 var:存放當前指到的集合物件中的成員。
 varStatus:存放當前指到的成員的相關資訊。(index:當前指到的成員的索引;count:當前總共指到成員的總數;first:當前指到的成員     是否為第一個成員;last:當前指到的成員是否為最後一個成員)。
 begin:迭代開始的位置,預設為0。
 end:迭代結束的位置,預設為最後。
 step:每次迭代的間隔數,預設為1。
範例:
<% 
int atts[] = {1,2,3,4,5,6,7,8,9,10}; 
request.setAttribute("atts", atts); 
%> 
<c:forEach items="${atts}" var="item" begin="0" end="9" step="1" > 
${item}</br> 
</c:forEach>  
此標籤也可以用於普通的迴圈控制,與for迴圈一樣。如:
<c:forEach begin="1" end="10" var="item" > 
${item}</br> 
</c:forEach>  

2、<c:forTokens>
作用:用指定分隔符分隔一字串,並迭代分隔後的陣列。
語法: <c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"] >
  本體內容
 </c:forTokens>
屬性說明:
 items:被分隔並迭代的字串。
 delims:用來分隔字串的字元。
 var:存放當前指到的成員。
 varStatus:存放當前指到的成員的相關資訊。(index:當前指到的成員的索引;count:當前總共指到成員的總數;first:當前指到的成員     是否為第一個成員;last:當前指到的成員是否為最後一個成員)。
 begin:迭代開始的位置,預設為0。
 end:迭代結束的位置,預設為最後。
 step:每次迭代的間隔數,預設為1。
範例1:
<c:forTokens items="A,B,C,D,E" delims="," var="item" > 
${item} 
</c:forTokens>  
用“,”號分隔字串,並迭代輸出分隔後的字串陣列,輸出結果為“ABCDE”。
範例2:
<c:forTokens items="A,B;C-D,E" delims=",;-" var="item" > 
${item}
</c:forTokens>   
delims中指定了三個分隔符“,”、“;”和“-”,可見我們一次可以設定所有想當做分隔字串用的字元。輸出結果依然為“ABCDE”。

四、URL操作


1、<c:import>
作用:將其他靜態或動態檔案包含到本身JSP網頁中。不但可以包含同一個web application下的檔案,還可以包含其他web application或其他網站的檔案。
語法: 
 <c:import url="url" [var="varName"] [scope="{page|request|session|application}"] >
  [<c:param name="paramName" value="paramValue"/>]
 </c:import>
屬性說明:
 url:要包含至本身JSP網頁的其他檔案的URL。必選
 var:將包含進來的其他檔案以字串的形式存放到指定的變數中。可選
 scope:var變數的作用範圍。可選
 <c:param>:可選子標籤,用於向包含進來的其他網頁檔案傳遞引數。
範例:
<c:import url="http://java.sun.com" > 
<c:param name="test" value="1234" />                          
</c:import>  
說明:當<c:import>標籤中未指定var變數時,會直接將包含進來的其他網頁檔案內容顯示出來,如果指定了var變數,則會將內容存放到var變數中,不顯示。

2、<c:url>
作用:生成一個URL。
語法: 
 <c:url value="url" [context="expression"] [var="name"] [scope="scope"]>
  [<c:param name="expression" value="expression"/>]
 </c:url>
範例1:
<a href="<c:url value=index.jsp'/>">index page</a>
在<a>超連結標籤中生成一個URL,指向index.jsp。
範例2:
<c:url value="index.jsp"> 
  <c:param name="keyword" value="${searchTerm}"/> 
  <c:param name="month" value="02/2003"/> 
</c:url>
生成一個URL,並傳遞引數,生成的結果為index.jsp?keyword=*&month=02/2003,*代表傳遞的searchTerm的值。


3、<c:redirect>
作用:可以將客戶端的請求從一個JSP網頁導向到其他檔案。
語法: 
 <c:redirect url="url">
  [<param name="paramName" value="paramValue">]
 </c:redirect>
將請求導向URl指向的其他檔案。

五、I18N格式化標籤庫

使用I18N格式化標籤之前,需先插入以下指令:

1、<fmt:formatNumber>

作用:將數字格式化成數字、貨幣、百分比

語法:

<fmt:formatNumber value="value" [var="varName"] [type="{number|curreny|percent}"] [maxFractionDigits="3"] [groupingUsed="{true|false}"]/>

屬性說明:
value:需要進行格式化的值

var:值的另一個變數宣告

maxFractionDigits:保留的小數點個數

2、<fmt:parseNumber>

作用:將字串型的數字、貨幣、百分比格式化成數字

語法:

<fmt:parseNumber value="¥6789.36" [var="result"] [type="{number|curreny|percent}"] >

屬性說明:
value:需要進行格式化的值

var:值的另一個變數宣告

3、<fmt:formatDate>

作用:格式化時間和日期

4、<fmt:parseDate>
作用:將字串形式的時間和日期轉換成日期時間型別。

5、<fmt:setTimeZone>

作用:在JSP 網頁中設定預設時區。

6、<fmt:timeZone>

作用:在JSP網頁中為該標籤體內的程式碼段設定時區。

7、<fmt:setLocale>

作用:在JSP 網頁中設定語言地區。

8、<fmt:requestEncoding>

作用:在JSP 網頁中設定請求所採用的編碼方式,等價於JSP中的request. setCharacterEncoding(String encoding)。

9、<fmt:setBundle>

作用:設定預設的訊息資源。

10、<fmt:message>

作用:在指定的訊息資源中按關鍵字取出相應的訊息內容。

11、<fmt:param>

作用:在從訊息資源中取出訊息內容時,為訊息內容設定動態引數。

12、<fmt:bundle>

作用:為該標籤體內的程式碼段設定一個訊息資源。

二、常見錯誤

應用部署執行的時候出現JSP異常, 發生在使用JSTL庫的時候: According to TLD or attribute directive in tag file, attribute value does not accept any expressions, 可能是因為使用了JSP2.0版本, 同時又沒有使用JSTL core庫的備用版本(RT庫), 以下有兩種處理方法:

1. 如果不想使用web-app_2_4.xsd 和jstl1.1 那麼可以按照下面兩種方式修改

1). 修改web.xml.

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>


2). 使用JSTL core RT庫

JSTL core庫的有兩種taglib偽指令, 其中RT庫即是依賴於JSP傳統的請求時屬性值, 而不是依賴於EL來實現(稱為EL庫.JSP2.0將支援EL)

JSP中使用<%@ taglib uri=http://java.sun.com/jstl/core prefix="c"%>在2.3版本都可以,在2.4就不行了, 這是版本不相容引起的,稍後將介紹servlet的版本。

只要將

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
改為
<%@ taglib uri=http://java.sun.com/jstl/core_rt prefix="c"%>


2:如果要使用jstl1.1(推薦) 則按照一下修改,很簡單的。


jstl存在1.0和1.1的差異問題,用EL建議需要在1.1的版本下,


使用jstl1.1 只需要將

1.0的為

換成:

三、EL表示式

Html程式碼  收藏程式碼
  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>  
  2. <%@ page import="com.cos.User,java.util.*" %>  
  3. <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <body>  
  7.     <%  
  8.         Map<User,String[]> map = new HashMap<User,String[]>();  
  9.         String temp[] = new String[2];  
  10.         User user1 = new User();  
  11.         user1.setName("zhangsan");  
  12.         user1.setAge(20);  
  13.         temp[0] = "1";  
  14.         temp[1] = "111111";  
  15.         map.put(user1, temp);  
  16.         User user2 = new User();  
  17.         user2.setName("lisi");  
  18.         user2.setAge(22);  
  19.         temp = new String[2];  
  20.         temp[0] = "2";  
  21.         temp[1] = "2222222";  
  22.         map.put(user2, temp);  
  23.         request.setAttribute("m",map);  
  24.     %>  
  25.     <c:forEach items="${m}" var="user">  
  26.         <tr>  
  27.             <td>${user.key.name}</td>  
  28.             <td>${user.key.age}</td>  
  29.             <td>${user.value[0]}</td>  
  30.             <td>${user.value[1]}</td>  
  31.         </tr>  
  32.         <br>  
  33.     </c:forEach>  
  34. </body>  
  35. </html>  
Html程式碼  收藏程式碼
  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>  
  2. <%@ page import="com.cos.User,java.util.*" %>  
  3. <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <body>  
  7.     <%  
  8.         request.setAttribute("m",null);  
  9.         request.setAttribute("mm","bbb");   
  10.     %>  
  11.     <c:out value="${m}" default="nnnnnn"/><br>  
  12.     <c:out value="${mm}" default="nnnnnnlllllll"/><br>  
  13.     <c:set value="hello word." var="cset" scope="page"/>  
  14.     ${cset}<br>  
  15.     <c:if test="true" var="t">  
  16.         is true  
  17.     </c:if>  
  18. </body>  
  19. </html>  
Html程式碼  收藏程式碼
  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>  
  2. <%@ page import="com.cos.User,java.util.*" %>  
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>  
  4. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  6. <html>         
  7.     <body>          
  8.         <fmt:formatNumber value="6789.3581" var="result" type="currency" maxFractionDigits="3" groupingUsed="true"/>        
  9.         人民幣6789.3581格式化的結果為(保留3位小數):  
  10.         <c:out value="${result}"/><br><br>        
  11.         <fmt:formatNumber value="3.1415926" var="result" maxFractionDigits="2" groupingUsed="false"/>      
  12.         3.1415926保留兩位小數格式化的結果為:  
  13.         <c:out value="${result}"/><br><br>        
  14.         <fmt:formatNumber value="0.653789" type="percent" var="result" maxFractionDigits="2" groupingUsed="false"/>        
  15.         0.653789按百分比式化的結果為:   
  16.         <c:out value="${result}"/><br><br>      
  17.     </body>    
  18. </html>  
Html程式碼  收藏程式碼
  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>  
  2. <%@ page import="com.cos.User,java.util.*" %>  
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>  
  4. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  6. <html>         
  7.     <body>          
  8.         <fmt:parseNumber value="¥6789.36" var="result" type="currency"/>        
  9.         "¥6789.36"轉換為數字的結果為:<c:out 

    相關推薦

    使用jstl el表示式對form表單的功能進行區分 比如新建和修改共用一個form

    新建一個專欄,修改這個專欄資訊 完全可以做在一個jsp的一個form中 但是,需要注意的是,使用mvc的物件屬性自動封裝的話 如果id為空,將會報錯,無法進入controller中的 所以要在頁面上判斷,id是不是大於0,大於0表示已經傳來了一個model這時候把id設為隱藏域 並且執行修改操作

    JSP 使用jstl el表示式判斷session值

    maven專案中匯入  jstl.jar 和 standard.jar 依賴包 <!-- jstl.jar 和 standard.jar 【前端判斷所需:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix

    JavaEE_JSP_完整的JSTL+EL表示式將資料顯示出來的流程

    總共分為五個部分, 1.EL+JSTL前端JSP頁面 2.servlet(傳遞資料) 3.dao(操作資料庫) 4.javaBean(ORM) 5.資料庫表設計 1.EL+JSTL前端JSP頁面 <%@ page language="java" import="j

    JSTL EL表示式

    JSTL (JSP Standard Tag Library ,JSP標準標籤庫) JSTL標籤庫分為5類:JSTL核心標籤庫、JSTL函式標籤庫、資料庫標籤庫、I18N格式化標籤庫、XML標籤庫。 JSTL的核心標籤庫主要包括:表示式操作、流程控制、迭代操作和U

    c:foreach jstl el表示式的用法以及c:foreach中的hidden的用法

    >>1.JSTL的用法 <c:forEach var="varLogList" items="${logList}" varStatus="status"> <tr onmouseover="changet

    【java學習之旅】——JSTL+EL表示式讓jsp頁面簡潔化

    【前言】 jsp2.0之後,頁面上幾乎不使用Java指令碼了,其實不難理解,因為在計算機中程式分工越來越明確,三層,mvc的使用都是程式劃分層次結構的產物,jsp只能用做頁面的顯示,所以JSTL標

    Taglib原理和實現 第五章:再論支援El表示式jstl標籤

    1。問題:你想和jstl共同工作。比如,在用自己的標籤處理一些邏輯之後,讓jstl處理餘下的工作。 2。看這個jsp例子: .... <% String name="diego"; request.setAttribute("name",name); %> <c:out&

    09-【el表示式jstl標籤庫】

    el表示式和jstl標籤庫 一:el表示式:表示式語言,jsp頁面獲取資料比較簡單1、el表示式的語法(掌握)el表示式通常取值是獲取作用域物件中的屬性值:${屬性名}=>是el表示式的簡寫的形式跟jquery不一樣,$(選擇器)jquery物件,程式碼寫在js的指令碼塊中完整的書寫形式:  四個作用

    JavaWeb - JSTLEL 表示式

    一、EL表示式 簡介   - EL表示式介紹及作用:Expression Language(表示式語言),目的是替代JSP頁面中的複雜程式碼。   - EL表示式語法:“${變數名}”。 EL表示式的語法有兩個要素:$ 和 {}。 例如: 點號記法:${Be

    EL表示式jstl技術、filter過濾器、JAVA反射

    三天看了三種新技術的教學視訊作為jsp學習的收尾吧,前幾天留言板小樣例的課堂講解反饋效果極差,其中一個原因就是裡面的程式碼太亂,顯示頁面巢狀過多java的邏輯程式碼,顯得極不規範,所以就想用EL表示式結合jstl的一些標籤儘量使得程式碼能夠整潔規範一些,剛好也可以將新學的東西運用在結課的課程設計

    5分鐘學會EL表示式JSTL表示式

                                              &nb

    JavaWeb學習筆記及案例(一)JSP與EL表示式JSTL

    1.JSP 1.1JSP的三大指令 page include taglib 指令的寫法 <%@ 指令名字 %> 1.1.1jsp的page指令 1.extends 用於指定jsp翻譯成java檔案後,繼承的父類是誰,一般不改 2.s

    Web - EL表示式JSTL表示式.

    一、EL表示式. 語法: ${ 表示式 } 目的: 替代jsp頁面中輸出指令碼的編寫. 1.作用一: 獲取域中資料. 四大域物件: pageContext -> request -> session -> application 1.獲取簡單

    JAVAWEB學習(10) - EL表示式JSTL

    EL表示式和JSTL 一、EL表示式 1.1. EL表示式是什麼 是一套簡單的運算規則,用於給jsp標籤的屬性賦值,也可以脫離jsp標籤,直接使用。 1.2. EL表示式的使用 1.2.1. 讀取bean的屬性值 javabean指的是一個符合如下要求的Java類:

    JSP中EL表示式JSTL標籤庫

    EL表示式格式:${} u s e

    JSTLEL 表示式

        目錄 1、為什麼需要EL 1、JavaBean在JSP中的侷限 2、解決辦法 2、EL表示式簡介 1、什麼是EL 2、EL的功能 3、EL的特點 4、EL表示式語法 1、使用變數名獲取值 2、變數屬性範圍名稱 3、獲

    EL表示式JSTL的使用

    一:EL表示式 1.概述:在jsp開發中,為了獲取Servlet域物件中儲存的資料,經常要寫很多java程式碼,這樣的做法會使JSP頁面混亂,難以維護,為此,在JSP2.0規範中提供了EL表示式。它是Expression Language的縮寫。 2.語法:${表示式} 2.1內建物件:   2.

    jsp EL表示式JSTL

    課程內容 1.servlet—->jsp 2.EL表示式 3.JSTL 課堂筆記 一、Servlet—jsp 二、EL表示式 User rs = request.getAttribute(“rsNew”) <%=rs

    JSP、El表示式JSTL表示式筆記

    html改jsp替換標頭檔案 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/js

    javaweb jsp&el表示式&jstl 解析

    JSP & EL & JSTL jsp Java Server Page 什麼是jsp 從使用者角度看待 ,就是是一個網頁 , 從程式設計師角度看待 , 其實是一個java類, 它繼承了servlet,所以可以直接說jsp 就是一個Se