導航:首頁 > 編程語言 > jstlfmt直接輸出

jstlfmt直接輸出

發布時間:2023-12-07 21:22:12

jsp中的JSTL與EL表達式用法及區別

JSTL (JSP Standard Tag Library ,JSP標准標簽庫)
JSTL標簽庫分為5類: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。即默認會將<、>、』、」 和 & 轉換為 <、>、'、"和&。如果設為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格式化標簽之前,需先插入以下指令:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
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>
作用:為該標簽體內的代碼段設置一個消息資源。
他們的區別:
EL相關概念JSTL一般要配合EL表達式一起使用,來實現在jsp中不出現java代碼段。所以我們先來學習EL表達式EL主要用於查找作用域中的數據,然後對它們執行簡單操作;它不是編程語言,甚至不是腳本編制語言。通常與 JSTL 標記一起作用,能用簡單而又方便的符號來表示復雜的行為。EL基本格式EL表達式的格式:用美元符號($)定界,內容包括在花括弧({})中;例如: ${loginInfoBean.suser}此外,您可以將多個表達式與靜態文本組合在一起以通過字元串並置來構造動態屬性值;例如:Hello {loginInfoBean.suser} ${loginInfoBean.spwd}EL語法組成-標識符EL表達式由標識符、存取器、文字和運算符組成。標識符用來標識存儲在作用域中的數據對象。EL 有 11 個保留標識符,對應於 11個EL隱式對象。除了11隱式對象外,假定所有其它標識符都用來標識作用域的變數。標識符例:${abc} 相當於<%=pageContext.findAttribute(「abc」)%>${og_1} <%=pageContext.findAttribute(「og_1」)%>…等等;就是說{}內的標識符除了11個保留字之外都表示作用域中的數據對應的名.${requestScope}中的requestScope是11個EL隱式對象之一,它不再表示作用域中數據,而是表示request作用域;EL隱藏對象pageContext PageContext 實例對應於當前頁面的處理pageScope 與頁面作用域屬性的名稱和值相關聯的Map類requestScope 與請求作用域屬性的名稱和值相關聯的Map類sessionScope 與會話作用域屬性的名稱和值相關聯的Map類applicationScope 與應用程序作用域屬性的名稱和值相關聯的Map類param 按名稱存儲請求參數的主要值的 Map 類paramValues 將請求參數的所有值作為 String 數組存儲的 Map 類Header 按名稱存儲請求頭主要值的 Map 類headerValues 將請求頭的所有值作為 String 數組存儲的 Map 類cookie 按名稱存儲請求附帶的 cookie 的 Map 類initParam 按名稱存儲 Web 應用程序上下文初始化參數的Map類EL存取器存取器用來檢索對象的特性或集合的元素。存取器: 通過 「[]」 或 「.」 符號獲取相關數據例:${userBean.suser} 或 ${userBean[「suser」]}//獲取輸出bean中的suser屬性值;${mcType[「id」]} //獲取map中key為id對應的值;EL運算符運算符允許對數據和文字進行組合以及比較。EL運算符:類別 運算符算術運算符 +、-、*、/(或 div)和 %(或 mod)關系運算符 ==(或eq)、!=(或ne)、<(或lt)、>(或gt)、<=(或le) 和 >=(或ge)邏輯運算符 &&(或 and)、||(或or)和 !(或 not)驗證運算符 empty驗證運算符(empty):對於驗證數據特別有用。empty 運算符採用單個表達式作為其變數(也即,${empty input}),並返回一個布爾值,該布爾值表示對表達式求值的結果是不是「空」值。求值結果為 null 的表達式被認為是空,即無元素的集合或數組。如果參數是對長度為零的 String 求值所得的結果,則 empty 運算符也將返回 true。EL文字文字表示固定的值 — 數字、字元、字元串、布爾型或空值。在 EL 表達式中,數字、字元串、布爾值和 null 都可以被指定為文字值。字元串可以用單引號或雙引號定界。布爾值被指定為 true 和 falseJSTL是什麼JSTL(JSP Standard Tag Library,JSP標准標簽庫)是一個不斷完善的開放源代碼的JSP標簽庫,是由apache的jakarta小組來維護的。JSTL1.0 由四個定製標記庫(core、format、xml 和 sql)和一對通用標記庫驗證器組成。core 標記庫提供了定製操作,通過限制了作用域的變數管理數據,以及執行頁面內容的迭代和條件操作。它還提供了用來生成和操作 URL 的標記。format 標記庫定義了用來格式化數據(尤其是數字和日期)的操作。它還支持使用本地化資源束進行JSP頁面的國際化。xml 庫包含一些標記,這些標記用來操作通過XML表示的數據,而 sql 庫定義了用來查詢關系資料庫的操作。 兩個 JSTL 標記庫驗證器允許開發人員在其 JSP 應用程序中強制使用編碼標准。如果要使用JSTL,則必須引用jstl.jar和 standard.jar兩個包。為什麼要用JSTL我們JSP用於開發信息展現頁非常方便;也可以嵌入java代碼(scriptlet、表達式和聲明)代碼用來實現相關邏輯控制。看下面程序。但這樣做會帶來如下問題:jsp維護難度增加;出錯提示不明確,不容易調試;分工不明確;(即jsp開發者是美工,也是程序員);最終增加程序的開發成本;解決上面的問題可以使用定製標記庫,JSTL使JSP開發者可以減少對腳本元素的需求,甚至可以不需要它們,從而避免了相關的維護成本。使分工更明確。<% if (session.getAttribute(「user」).equals(「member」)) {%><p>Welcome, member!</p><% } else { %><p>Welcome, guest!</p><% } %>JSTL一般配合EL一起使用,因此先看看EL.JSTL部署在EE應用程序中部署JSTL有兩種方式:已存在的工程上部署將jstl.jar和standard.jar兩個包考到現有工程WebRoot / WEB-INF / lib 目錄下將相關的 .tld文件考到現有工程 WebRoot /WEB-INF 目錄下;也可通過eclipse在已存在

❷ JSTL標簽

根據功能可以分為五大類:

1、核心標簽

2、格式化標簽

3、SQL 標簽

4、XML 標簽

5、JSTL 函數

一、核心標簽

 1、<c:out />標簽會自動忽略XML標記字元,所以它們不會被當做標簽來處理。標簽用來顯示一個表達式的結果,與<%= %>作用相似,它們的區別就是<c:out>標簽可以直接通過"."操作符來訪問屬性。

<c:out>標簽有如下屬性:

 scope 的作用域大小依次為:

application > session > request > page(默認)

jsp 處理變數的作用域先後依次為:

page(默認) -> request -> session -> application

2、<c:set>標簽用於設置變數值和對象屬性。

3、<c:remove>標簽用於移除一個變數。

4、<c:catch> 標簽主要用來處理產生錯誤的異常狀況,並且將錯誤信息儲存起來。

5、<c:choose>標簽與Java switch語句的功能一樣,用於在眾多選項中做出選擇。

switch語句中有case,而<c:choose>標簽中對應有<c:when>,switch語句中有default,而<c:choose>標簽中有<c:otherwise>。

<c:when>標簽的屬性如下:

6、<c:import>標簽提供了所有<jsp:include>行為標簽所具有的功能,同時也允許包含絕對URL。

<c:import>標簽有如下屬性:

7、<c:forEach>標簽用作迭代一個集合中的對象。

語法格式:

<c:forTokens

    items="<string>"

    delims="<string>"

    begin="<int>"

    end="<int>"

    step="<int>"

    var="<string>"

    varStatus="<string>">

<c:forEach>標簽有如下屬性:

c:forEach varStatus 屬性

  current : 當前這次迭代的(集合中的)項

  index : 當前這次迭代從 0 開始的迭代索引

  count : 當前這次迭代從 1 開始的迭代計數

  first : 用來表明當前這輪迭代是否為第一次迭代的標志

  last : 用來表明當前這輪迭代是否為最後一次迭代的標志

  begin : 屬性值

  end : 屬性值

  step : 屬性值

例如:

<c:foreach  items="${sessionScope.userList}"  var="userItem"  begin="1"  end="10"  step="3"  varStatus="userStatus"> XXX </c:foreach>

實例解讀:  對 session 對象存儲的 userList 集合對象進行遍歷,每次訪問的項暫時存儲在 userItem 變數中,從索引 1 開始至索引 10 進行訪問,但不是依次訪問,每隔 3 個元素訪問一次。每次訪問項的狀態相關值由 userStatus 對象暫存。

<c:foreach> 的 varStatus 屬性暫存項的相關狀態屬性,可由 EL 表達式引用。

${userStatus.index} 此項的索引,從0開始

${userStatus.count} 此項的計數序號,從1開始

${userStatus.first} 此項是否是第一項,布爾值

${userStatus.last} 此項是否是最後一項,布爾值

${userStatus.begin} 此次迭代的起始索引,對應<c:foreach>中begin屬性值

${userStatus.end} 此次迭代的終止索引,對應<c:foreach>中end屬性值

${userStatus.step} 此次迭代的跳躍步伐,對應<c:foreach>中step屬性值 

8、<c:forTokens>標簽通過指定分隔符將字元串分隔為一個數組然後迭代它們。

<c:forTokens

    items="<string>"

    delims="<string>"

    begin="<int>"

    end="<int>"

    step="<int>"

    var="<string>"

    varStatus="<string>">

9、<c:url>標簽將URL格式化為一個字元串,然後存儲在一個變數中。

這個標簽在需要的時候會自動重寫URL。

var屬性用於存儲格式化後的URL。

<c:url>標簽只是用於調用response.encodeURL()方法的一種可選的方法。它真正的優勢在於提供了合適的URL編碼,包括<c:param>中指定的參數。

<c:url>標簽有如下屬性:

10、<c:param>標簽用於在<c:url>標簽中指定參數,而且與URL編碼相關。

在<c:param>標簽內,name屬性表明參數的名稱,value屬性表明參數的值。

語法格式:

<c:param name="<string>" value="<string>"/>

<c:param>標簽有如下屬性:

11、<c:redirect>標簽通過自動重寫URL來將瀏覽器重定向至一個新的URL,它提供內容相關的URL,並且支持c:param標簽。

c:redirect標簽有如下屬性:

二、格式化標簽

JSTL格式化標簽用來格式化並輸出文本、日期、時間、數字。引用格式化標簽庫的語法如下:

<%@ taglib prefix="fmt uri="http://java.sun.com/jsp/jstl/fmt" %>

1、<fmt:formatNumber>標簽,<fmt:formatNumber>標簽用於格式化數字,百分比,貨幣。

語法格式:

<fmt:formatNumber

  value="<string>"

  type="<string>"

  pattern="<string>"

  currencyCode="<string>"

  currencySymbol="<string>"

  groupingUsed="<string>"

  maxIntegerDigits="<string>"

  minIntegerDigits="<string>"

  maxFractionDigits="<string>"

  minFractionDigits="<string>"

  var="<string>"

  scope="<string>"/>

fmt:formatNumber>標簽有如下屬性:

如果type屬性為percent或number,那麼您就可以使用其它幾個格式化數字屬性。maxIntegerDigits屬性和minIntegerDigits屬性允許您指定整數的長度。若實際數字超過了maxIntegerDigits所指定的最大值,則數字將會被截斷。

有一些屬性允許您指定小數點後的位數。minFractionalDigits屬性和maxFractionalDigits屬性允許您指定小數點後的位數。若實際的數字超出了所指定的范圍,則這個數字會被截斷。

數字分組可以用來在每三個數字中插入一個逗號。groupingIsUsed屬性用來指定是否使用數字分組。當與minIntegerDigits屬性一同使用時,就必須要很小心地來獲取預期的結果了。

您或許會使用pattern屬性。這個屬性可以讓您在對數字編碼時包含指定的字元。接下來的表格中列出了這些字元。

2、<fmt:formatDate>標簽用於使用不同的方式格式化日期。

語法格式

語法格式

<fmt:formatDate

  value="<string>"

  type="<string>"

  dateStyle="<string>"

  timeStyle="<string>"

  pattern="<string>"

  timeZone="<string>"

  var="<string>"

  scope="<string>"/>

<fmt:formatDate>標簽有如下屬性:

<fmt:formatDate> 標簽格式模式:

三、JSTL函數

JSTL包含一系列標准函數,大部分是通用的字元串處理函數。引用JSTL函數庫的語法如下:

<%@ taglib prefix="fn"uri="http://java.sun.com/jsp/jstl/functions" %>

1、fn:contains()函數用於確定一個字元串是否包含指定的子串

<c:if test="${fn:contains(<原始字元串>, <要查找的子字元串>)}">

...</c:if>

❸ <c:out value="${buttons}" escapeXml="false" />

這是JSTL標簽的用法

JSTL簡介
JSTL是一個不斷完善的開放源代碼的JSP標簽庫,是由的jakarta小組來維護的。JSTL只能運行在支持JSP1.2和Servlet2.3規范的容器上,如tomcat 4.x。但是在即將推出的JSP 2.0中是作為標准支持的。
JSTL目前的最新版本為1.02,最終發布版為1.0。JSTL包含兩個部分:標簽庫和EL(Expression Language表達式語言)語言。標簽庫目前支持四種標簽:
標簽 URI前 綴 示例
Core http://java.sun.com/jstl/core c <c:tagname ...> XML processing http://java.sun.com/jstl/xml x <x:tagname ...> I18N capable formatting http://java.sun.com/jstl/fmt fmt <fmt:tagname ...> Database access (SQL) http://java.sun.com/jstl/sql sql <sql:tagname ...>
Core支持JSP中的一些基本的操作;
XML processing支持XML文檔的處理;
I18N capable formatting支持對JSP頁面的國際化;
Database access (SQL)支持JSP對資料庫的操作。
由於本人水平有限,本文僅介紹Core標簽,如有興趣,可一起探討其它三種標簽的使用與擴充。
EL語言介紹
EL語言是JSTL輸出(輸入)一個JAVA表達式的表示形式。
在JSTL中,EL語言只能在屬性值中使用。EL語言只能通過建立表達式來進行調用。在屬性值中使用表達式有三種方式。
1、 value屬性包含一個表達式
<some:tag value=""/>
在這種情況下,表達式值被計算出來並根據類型轉換規則賦值給value屬性。比如:<c:out value="" />中的就是一個EL,它相當於JSP語句<%=request.getAttribute(「username」)%>或<% =session.getAttribute(「username」)%>
2、 value屬性包含一個或多個屬性,這些屬性被文本分割或圍繞
<some:tag value="sometext"/>
在這種情況下,表達式從左到右進行計算,並將結果轉換為字元串型(根據類型轉換規則),並將結果賦值給value屬性
3、 value屬性僅僅包含文本
<some:tag value="sometext"/>
在這種情況下,字元串型屬性value將根據類型轉換規則轉換為標簽所希望的類型。
EL語言的操作符
取得某個對象或集合中的屬性值
為了獲得集合中的屬性,EL支持以下兩種操作
1.使用.操作符來獲得有名字的屬性。例如表達式表明對象user的username屬性
2. 使用[]操作符來獲得有名字或按數字排列的屬性。
表達式和表達式含義相同
表達式 表明row集合的第一個條目。
在這里user是一個類的對象,它的屬性username必須符合標准JavaBean的規范,即必須為username屬性定義相應的getter、setter方法。
Empty操作符(空值檢查)
使用empty操作符來決定對象、集合或字元串變數是否為空或null。例如:
true
如果request的參數列表中的username值為null,則表達式的值為true。 EL也可以直接使用比較操作符與null進行比較。如true。
比較操作符 操作符 描述
==或eq 相等檢查
!=或ne 不等檢查
<或lt 小於檢查
>或gt 大於檢查
<=或le 小於等於檢查
>=或ge 大於等於檢查
數字運算符與邏輯運算符均與JAVA語言相同,不再列表。
Core標簽庫
1、 通用標簽
<c:out>
<c:out>標簽用於在JSP中顯示數據,它有如下屬性 屬 性 描 述是否必須 預設值
value 輸出的信息,可以是EL表達式或常量 是 無
default value為空時顯示信息 否 無
escapeXml 為true則避開特殊的xml字元集 否 true
例子: 您的用戶名是: <c:out value=」」 default=」guest」/>
顯示用戶的用戶名,如為空則顯示guest
<c:out value=""/>
指定從session中獲取username的值顯示;
<c:out value="" />
顯示username的值,默認是從request(page)中取,如果request中沒有名為username的對象則從session中取, session中沒有則從application(servletContext)中取,如果沒有取到任何值則不顯示。
<c:set>
<c:set>標簽用於保存數據,它有如下屬性 屬 性 描 述 是否必須預設值
value 要保存的信息,可以是EL表達式或常量 否
target 需要修改屬性的變數名,一般為javabean的實例 否 無
property 需要修改的javabean屬性 否 無
var 需要保存信息的變數 否 無
scope 保存信息的變數的范圍 否 page
如果指定了target屬性, 那麼property屬性也必須指定。
例子: <c:set value="" var="test2" scope=」session」 />
將test.testinfo的值保存到session的test2中,其中test是一個javabean的實例,testinfo是test對象的屬性。
<c:set target="" property="city" value=""/>
將對象cust.address的city屬性值保存到變數city中
<c:remove>
<c:remove>標簽用於刪除數據,它有如下屬性 屬 性 描 述 是否必須預設值
var 要刪除的變數 是 無
scope 被刪除變數的范圍 否所有范圍,包括page、request、session、application等
例子: <c:remove var="test2" scope="session"/>
從session中刪除test2變數。
2、 流控制標簽
<c:if>
<c:if>標簽有如下屬性 屬 性 描 述 是否必須 預設值
test 需要評價的條件,相當於if (...){}語句中的條件 是 無
var 要求保存條件結果的變數名 否 無
scope 保存條件結果的變數范圍 否 page
<c:choose>
這個標簽不接受任何屬性
<c:when>
<c:when>標簽有以下屬性 屬 性 描 述 是否必須 預設值
test 需要評價的條件 是 無
<c:otherwise>
這個標簽同樣不接受任何屬性
例子: <c:if test="">
user.wealthy is true.
</c:if>
如果user.wealthy值true,則顯示user.wealthy is true.
<c:choose>
<c:when test="">
user.generous is true.
</c:when>
<c:when test="">
user.stingy is true.
</c:when>
<c:otherwise>
user.generous and user.stingy are false.
</c:otherwise>
</c:choose>
只有當條件user.generous返回值是true時,才顯示user.generous is true.
只有當條件user.stingy返回值是true時,才顯示user.stingy is true.
其它所有的情況(即user.generous和user.stingy的值都不為true)全部顯示user.generous and user.stingy are false.
由於JSTL沒有形如if (){…} else {…}的條件語句,所以這種形式的語句只能用<c:choose>、<c:when>和<c:otherwise>標簽共同來完成了。
3、 循環控制標簽
<c:forEach>
<c:forEach>標簽用於通用數據,它有以下屬性 屬 性 描 述是否必須 預設值
items 進行循環的項目 否 無
begin 開始條件 否 0
end 結束條件 否 集合中的最後一個項目
step 步長 否 1
var 代表當前項目的變數名 否 無
varStatus 顯示循環狀態的變數 否 無
例子: <c:forEach items="" var="vector">
<c:out value=""/>
</c:forEach>
相當於java語句 for (int i=0;i<vectors.size();i++) {
out.println(vectors.get(i));
}
在這里vectors是一個java.util.Vector對象,裡面存放的是String數據,vector是當前循環條件下String對象。實際上這里的vectors可以是任何實現了java.util. Collection介面的對象。
<c:forEach begin="0" end="100" var="i" step="1">
count=<c:out value=""/><br>
</c:forEach>
輸出:
count=0
count=100
<c:forTokens>
<c:forTokens>標簽有以下屬性 屬 性 描 述 是否必須 預設值
items 進行循環的項目 是 無
delims 分割符 是 無
begin 開始條件 否 0
end 結束條件 否 集合中的最後一個項目
step 步長 否 1
var 代表當前項目的變數名 否 無
varStatus 顯示循環狀態的變數 否 無
例子
<c:forTokens items="a:b:c:d" delims=":" var="token">
<c:out value=""/>
</c:forTokens>
這個標簽的使用相當於java.util.StringTokenizer類。在這里將字元串a:b:c:d以:分開循環四次,token是循環到當前分割到的字元串。
4.導入文件和URL
JSTL核心標簽庫支持使用<c:import>來包含文件,使用<c:url>來列印和格式化URL,使用<c:redirect>來重定向URL。
<c:import>
<c:import>標簽包含另外一個頁面代碼到當前頁,它有以下屬性 屬性 描 述 是否必須 預設值
url 需要導入頁面的url 是 無
context /後跟本地web應用程序的名字 否 當前應用程序
charEncoding 用於導入數據的字元集 否 ISO-8859-1
var 接受導入文本的變數名 否 page
scope 接受導入文本的變數的變數范圍 否 1
varReader 用於接受導入文本的java.io.Reader變數名 否 無
varStatus 顯示循環狀態的變數 否 無
<c:url>
<c:url>標簽輸出一個url地址,它有以下屬性 屬 性 描 述 是否必須預設值
url url地址 是 無
context /後跟本地web應用程序的名字 否 當前應用程序
charEncoding 用於導入數據的字元集 否 ISO-8859-1
var 接受處理過的url變數名,該變數存儲url 否 輸出到頁
scope 存儲url的變數名的變數范圍 否 page
例子:
<c:import url="http://www.url.com/edit.js" var="newsfeed"/>
將url http://www.url.com/edit.js包含到當前頁的當前位置,並將url保存到newsfeed變數中
<a href="<c:url url="/index.jsp"/>"/>
在當前頁的當前位置輸出<a href="http://www.yourname.com/index.jsp"/>,http://www.yourname.com是當前頁的所在的位置。
<c:redirect>
<c:redirect>標簽將請求重新定向到另外一個頁面,它有以下屬性 屬性 描 述 是否必須 預設值
url url地址 是 無
context /後跟本地web應用程序的名字 否 當前應用程序
例子:
<c:redirect url="http://www.yourname.com/login.jsp"/>
將請求重新定向到http://www.yourname.com/login.jsp頁,相當於response.setRedirect("http://www.yourname.com/login.jsp");
<c:param>
<c:param>標簽用來傳遞參數給一個重定向或包含頁面,它有以下屬性屬 性 描 述 是否必須 預設值
name 在request參數中設置的變數名 是 無
value 在request參數中設置的變數值 否 無
例子:
<c:redirect url="login.jsp">
<c:param name="id" value="888"/>
</c:redirect>
將參數888以id為名字傳遞到login.jsp頁面,相當於login.jsp?id=888
JSTL的優點
1、在應用程序伺服器之間提供了一致的介面,最大程序地提高了WEB應用在各應用伺服器之間的移植。
2、 簡化了JSP和WEB應用程序的開發。
3、以一種統一的方式減少了JSP中的scriptlet代碼數量,可以達到沒有任何scriptlet代碼的程序。在我們公司的項目中是不允許有任何的scriptlet代碼出現在JSP中。
4、允許JSP設計工具與WEB應用程序開發的進一步集成。相信不久就會有支持JSTL的IDE開發工具出現。
總結
上面介紹的僅僅是JSTL的一部分,如果要使用JSTL,則必須將jstl.jar和 standard.jar文件放到classpath中,如果你還需要使用XML processing及Database access (SQL)標簽,還要將相關JAR文件放到classpath中,這些JAR文件全部存在於下載回來的zip文件中。這個zip文件可以從http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/jakarta-taglibs-standard-1.0.zip下載。
參考資料
1、 http://java.sun.com/procts/jsp/jstl/
sun公司的JSTL站點
2、 http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html
jakarta小組的JSTL站點
3、 http://www.manning.com/bayern/appendixA.pdf
JSTL的參考文檔,本文很多內容都是從這個PDF文件里翻譯的。
4、 <<J2EE編程指南(1.3版)>>
介紹了JSTL的雛形,wrox的書都是精品。

閱讀全文

與jstlfmt直接輸出相關的資料

熱點內容
oppo手機怎麼用數據線連接電腦 瀏覽:247
恆智天成備份文件在哪裡 瀏覽:976
電腦沒聯網怎麼拷貝文件 瀏覽:224
wps工具欄怎麼換成中文 瀏覽:338
win7和xp共享文件 瀏覽:883
蘋果4代音量鍵沒反應 瀏覽:827
怎樣打開tif文件 瀏覽:153
java下載文件zip 瀏覽:440
qq瀏覽器壓縮文件怎麼設密碼 瀏覽:526
黃埔數控編程哪裡好 瀏覽:406
mac109升級1010 瀏覽:691
在java的菜單如何導入文件 瀏覽:982
現在什麼網站銷量最高 瀏覽:760
angularjsclass定義 瀏覽:157
ug數控編程怎麼導出程序 瀏覽:466
cmdb文件 瀏覽:710
鵯文件夾 瀏覽:763
網路輿情應對的基本理念是什麼 瀏覽:433
word2007層次結構 瀏覽:456
去掉文件名的數字 瀏覽:713

友情鏈接