posts - 75,comments - 83,trackbacks - 0
          前言

          從JSP 1.1規范開始,JSP就支持在JSP中使用自定義標簽了,自定義標簽的廣泛使用造成了程序員重復定義,這樣就促成了JSTL(JavaServer Pages Standard Tag Library)的誕生。
          作者:楊通桿(http://hexun.com/yangtonggan/default.html)
          ?
          JSTL簡介

          JSTL是一個不斷完善的開放源代碼的JSP標簽庫,是由apache的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對數據庫的操作。
          讓我先給你介紹c標簽吧.
          ?

          1.<c:out>

          :Core(核心庫)

          URI:http://java.sun.com/jsp/jstl/core

          前綴:c?

          描述:<c:out>標簽是一個最常用的標簽,用于在?JSP?中顯示數據。它的作用是用來替代通過JSP?置對象out或者<%=%>標簽來輸出對象的值。

          語法:?

          沒有Body時的語法?

          <c:out?value=”value”?[escapeXml=”{true|false}”]?[default=”defaultValue”]/>?

          有Body時的語法?

          <c:out?value=”value”?[escapeXml=”{true|false}”]>?

          這里是Body部分?

          </c:out>??

          屬性:

          屬性名

          描述

          類型

          是否接受動態值

          是否支持EL

          是否

          必須

          默認值

          說明

          value?

          需要顯示的值

          Object?

          Y

          Y

          Y

          用來定義需要求解的表達式。

          escapeXml

          是否轉換特殊字符

          boolean

          Y

          Y

          N

          true

          用于指定在使用<c:out>標記輸出諸如“<”、“>”、“”、“”和“&”之類的字符(在?HTML??XML?中具有特殊意義)時是否應該進行轉義。如果將?escapeXml?設置為true,則會自動的進行編碼處理。

          default

          缺省值

          Object

          Y

          Y

          N

          當求解后的表達式為null或者String為空時將打印這個缺省值。

          Null和錯誤說明

          假若value為null,會顯示default的值;假若沒有設定default的值,則會顯示一個空的字符串。

          實例:

          ------------------------------------------------------------------------------------------------------------------------------------------

          Example1

          <c:out?value="${sessionScope.anyValue}"?default="no?value"?escapeXml="false"/>

          該示例將從Session查找名為“anyValue”的參數,并顯示在頁面,若沒有找到則顯示“no?value”。

          ------------------------------------------------------------------------------------------------------------------------------------------

          Example2

          您的用戶名是:?<c:out?value=”${user.username}”?default=”guest”/>?

          顯示用戶的用戶名,如為空則顯示guest

          <c:out?value="${sessionScope.username}"/>?

          指定從session中獲取username的值顯示;

          <c:out?value="${username}"?/>?

          顯示username的值,默認是從request(page)中取,如果request中沒有名為username的對象則從session中取,session中沒有則從application(servletContext)中取,如果沒有取到任何值則不顯示

          ------------------------------------------------------------------------------------------------------------------------------------------

          2.?<c:set>

          :Core(核心庫)

          URI:http://java.sun.com/jsp/jstl/core

          前綴:c?

          描述:<c:set>標簽用于為變量或JavaBean中的變量屬性賦值的工作。這個標簽用于在某個范圍(page、request、session、application等)中使用某個名字設定特定的值,或者設定某個已經存在的javabean對象的屬性。他類似于<%request.setAttrbute("name","value");%>?

          語法:?

          語法1:?沒有body

          將value的值存儲至范圍為scope的varName變量之中

          <c:set?value="value"?var="varName"?[scope="{page|request|session|application}"]/>

          語法2:?有body

          將body內容存儲至范圍為scope的varName變量之中

          <c:set?value="value"?[scope="{page|request|session|application}"]>

          ?body.....

          </c:set>

          語法3:?將value的值存儲至target對象屬性中

          <c:set?value="value"?target="target"?property="propertyNmae"/>

          語法4:?將body內容的數據存儲至target對象屬性中

          <c:set?target="target"?property="propertyNmae">

          ?body....

          </c:set>

          ??Null?和?錯誤處理:

          語法3和語法4會產生異常錯誤,有以下兩種情況:

          ?.target?為null

          ?.target?不是java.util.Map或JavaBean對象

          假若value為null時:將由存儲變量改為移除變量

          ?.語法1:?由var和scope所定義的變量,將被移除

          ???.若scope已指定時,則PageContext.removeAttribute(varName,scope);

          ???.若scope未指定時,則PageContext.removeAttribute(varName);

          ?.語法3:?

          ???.假若target為Map時,則Map.remove(property);

          ???.假若target為JavaBean時,propertye指定的屬性為null

          注意:?var和scope這兩個屬性不能使用表達式來表示,我們不能寫成?scope="${ourScope}"或var="${a}"

          屬性:

          屬性名

          描述

          類型

          是否接受動態值

          是否支持EL

          是否

          必須

          默認值

          說明

          value

          要被存儲的值?

          Object

          true

          Y

          被計算的表達式

          var

          變量名

          String

          false

          N

          被導出的保存了value屬性計算結果的范圍變量的名稱

          scope

          范圍

          String

          true

          N

          page

          var的JSP范圍

          target

          目標?對象

          String

          true

          Y

          要設置屬性的對象。必須是JavaBean對象或java.util.Map對象

          property

          指定target對象屬性

          Object?

          true

          Y

          要設置的target對象的屬性的名稱

          實例:

          ------------------------------------------------------------------------------------------------------------------------------------------

          Example1

          <c:set?value="this?is?andy"?var="oneString"/>

          該示例將為名為“oneString”的變量賦值為“this?is?andy”,其作用范圍為page。

          ------------------------------------------------------------------------------------------------------------------------------------------

          Example2

          <c:set?target="${cust.address}"?property="city"?value="$"/>?

          將對象cust.address的city屬性值保存到變量city中。

          ------------------------------------------------------------------------------------------------------------------------------------------

          Example3

          設置不同的屬性,并且指定它們的范圍:

          <c:set?value="10000"?var="maxUser"?scope="application"/>

          <c:set?value="20"?var="maxIdelTime"?scope="session"/>

          <c:set?value="next.jsp"?var="nextPage"?scope="page"/>

          ------------------------------------------------------------------------------------------------------------------------------------------

          Example4

          <c:set?var="bid"?value="${param.bookId}"/>?

          <jsp:setProperty?name="bookDB"?property="bookId"???value="${bid}"?/>

          ------------------------------------------------------------------------------------------------------------------------------------------

          Example5

          <%?Foo?foo?=?new?Foo();?pageContext.setAttribute("foo",?foo);?%>

          <c:out?value="${foo.date}"/><br>?<c:set?target="${foo}"?property="day"?value="1"/>?

          <c:out?value="${foo.date}"/>?

          ------------------------------------------------------------------------------------------------------------------------------------------

          3.??<c:remove>

          :Core(核心庫)

          URI:http://java.sun.com/jsp/jstl/core

          前綴:c?

          描述:<c:remove>標簽用于刪除存在于scope中的變量。類似于<%session.removeAttribute(“name”)%>?

          <%request.removeAttribute(“name”)%>...

          語法:?

          <c:remove?var="varName"?[scope="{page|request|session|application}"]/>

          屬性:

          屬性名

          描述

          類型

          是否接受動態值

          是否支持EL

          是否

          必須

          默認值

          說明

          var

          變量名

          String

          N

          N

          欲移除變量的名稱

          scope

          范圍

          String

          N

          N

          page

          var變量的JSP范圍;?若沒有指定,默認為全部查找

          ------------------------------------------------------------------------------------------------------------------------------------------

          實例:

          Example1

          <c:remove?var="sampleValue"?scope="session"/>

          ${sessionScope.sampleValue}

          ------------------------------------------------------------------------------------------------------------------------------------------

          Example2

          <c:remove?var="username"?scope="session"/>

          將username變量從session范圍移除。若我們不設定scope,則<c:remove>會移除所有范圍名稱為username

          的數據。

          ------------------------------------------------------------------------------------------------------------------------------------------

          4.<c:catch>

          :Core(核心庫)

          URI:http://java.sun.com/jsp/jstl/core

          前綴:c?

          描述:<c:catch>動作用于捕獲JSP元素在其體中拋出的異常,從而提供細粒度的錯誤控制,?此異常也可以保存為一個頁面作用域變量。當錯誤發生<c:catch>和</c:catch>之間時,只有<c:catch>和</c:catch>之間的程序會被中止忽略,但整個網頁不會被中止。它包含一個var屬性,是一個描述異常的變量,該變量可選。若沒有var屬性的定義,那么僅僅捕捉異常而不做任何事情,若定義了var屬性,則可以利用var所定義的異常變量進行判斷轉發到其他頁面或提示報錯信息。

          語法:?

          <c:catch?[var="var"]>?

          //可能發生錯誤的部分

          JSP?elements?

          </c:catch>?

          屬性:????

          屬性名

          描述

          類型

          是否接受動態值

          是否支持EL

          是否

          必須

          默認值

          說明

          var?

          變量名

          String?

          N

          N

          N

          用來存儲錯誤信息的變量

          實例:

          ------------------------------------------------------------------------------------------------------------------------------------------

          Example1

          <c:catch?var="importException">?

          <fmt:parseDate?value="${param.empDate}"?dateStyle="short"?/>?

          </c:catch>?

          <c:if?test="${importException?!=?null}">?

          <jsp:forward?page="input.jsp">?

          <jsp:param?name="msg"?value="Invalid?date?format"?/>?

          </jsp:forward>?

          </c:if>?

          ------------------------------------------------------------------------------------------------------------------------------------------

          Example2

          <c:catch?var="err">

          ?????????${param.sampleSingleValue[9]?==?3}

          </c:catch>?

          ${err}

          當“${param.sampleSingleValue[9]?==?3}”表達式有異常時,可以從var屬性“err”得到異常的內容,通常判斷“err”是否為null來決定錯誤信息的提示。

          ------------------------------------------------------------------------------------------------------------------------------------------

          5.<c:if>

          :Core(核心庫)

          URI:http://java.sun.com/jsp/jstl/core

          前綴:c?

          描述:<c:if>動作僅當所指定的表達式計算為true時才計算其體。計算結果也可以保存為一個作用域Boolean變量。?

          語法:

          語法1:沒有體?

          <c:if?test="booleanExpression?"?

          ?var="var?"?[scope="page?|request|session|application"]/>?

          語法2:有體?

          <c:if?test="booleanExpression">

          ?JSP?elements

          </c:if>

          屬性:

          屬性名

          描述

          類型

          是否接受動態值

          是否支持EL

          是否

          必須

          默認值

          說明

          test?

          測試表達式?

          boolean?

          Y?

          Y

          如果表達式的結果為true則執行body,false則相反

          var?

          變量名

          String?

          N

          N

          用來存儲test運算后的結果,即true或false??????????????????????????

          scope?

          變量作用域

          String?

          N

          N

          page

          var變量的JSP范圍

          實例:

          <c:if?test="${empty?param.empDate}">?

          <jsp:forward?page="input.jsp">?

          <jsp:param?name="msg"?value="Missing?the?Employment?Date"?/>?

          </jsp:forward>

          ?</c:if>

          6.<c:choose>

          :Core(核心庫)

          URI:http://java.sun.com/jsp/jstl/core

          前綴:c?

          描述:<c:choose>動作用于控制嵌套<c:when>和<c:otherwise>動作的處理,它只允許第一個測試表達式計算為true的<c:when>動作得到處理;如果所有<c:when>動作的測試表達式都計算為false,則會處理一個<c:otherwise>動作。<c:choose>標簽沒有屬性,可以被認為是父標簽,<c:when>、<c:otherwise>將作為其子標簽來使用。

          語法:

          <c:choose>

          body(<when>和<otherwise>)

          </c:choose>

          限制:

          <c:choose>的本地內容只能有:

          ?.空白

          ?.1或多個<c:when>

          ?.0或多個<c:otherwise>

          屬性:

          實例:

          ----------------------------------------------------------------------------------------------------------------------------------------

          Example1

          <c:choose>?

          <c:when?test="${product.onSale}">?

          ${product.salesPrice}?On?sale!?

          </c:when>?

          <c:otherwise>?

          ${product.price}?

          </c:otherwise>?

          </c:choose>?

          ---------------------------------------------------------------------------------------------------------------------------------------

          Example2

          <c:choose>

          ?<c:when?test="${condition1}">

          ??condition1?為?true

          ?</c:when>

          ?<c:when?test="${condition2}">

          ??condition2?為?true

          ?</c:when>

          ?<c:otherwise>

          ??condition1和conditon2都為false

          ?</<c:otherwise?>

          說明:

          在同一個<c:choose>中,假如所有的<c:when>的test都不為true時,則執行<c:otherwise>的本體內容。

          在同一個<c:choose>中,假若有好幾個<c:when>都會true時,只能有一個<c:when>成立。

          </c:choose>

          ----------------------------------------------------------------------------------------------------------------------------------------

          7.<c:when>

          :Core(核心庫)

          URI:http://java.sun.com/jsp/jstl/core

          前綴:c?

          描述:<c:when>標簽等價于“if”語句,它包含一個test屬性,該屬性表示需要判斷的條件。

          語法:

          <c:when?test="testCondition">

          Body?content

          </c:when>

          屬性:

          屬性名

          描述

          類型

          是否接受動態值

          是否支持EL

          是否

          必須

          默認值

          說明

          test

          測試表達式

          boolean

          Y

          Y

          如果表達式的結果為true則執行body,false則相反?

          實例:

          8.<c:otherwise>

          :Core(核心庫)

          URI:http://java.sun.com/jsp/jstl/core

          前綴:c?

          描述:<c:otherwise>標簽沒有屬性,它等價于“else”語句。

          語法:

          <c:otherwise>

          conditional?block

          </c:otherwise>

          屬性:

          實例:

          <c:choose>、<c:when>、<c:otherwise>標簽綜合實例

          <c:choose>

          ?????????<c:when?test="${paramValues.sampleValue[2]?==?11}">

          ???????????????????not?12?not?13,it?is?11

          ?????????</c:when>

          ?????????<c:when?test="${paramValues.sampleValue[2]?==?12}">

          ???????????????????not?11?not?13,it?is?12

          ?????????</c:when>

          ?????????<c:when?test="${paramValues.sampleValue[2]?==?13}">

          ???????????????????not?11?not?12,it?is?13

          ?????????</c:when>

          ?????????<c:otherwise>

          ???????????????????not?11?、12、13

          ?????????</c:otherwise>

          </c:choose>

          jstl C標簽(Ⅱ)地址:http://www.aygfsteel.com/tangzurui/archive/2008/08/13/221657.html

          posted on 2008-05-19 16:37 梓楓 閱讀(5579) 評論(2)  編輯  收藏 所屬分類: jstl標簽類

          FeedBack:
          # re: jstl C標準標簽庫Ⅰ
          2009-08-27 16:17 | 開門開門
          看  回復  更多評論
            
          # re: jstl C標準標簽庫Ⅰ
          2010-02-05 10:08 | zbx134062
          謝謝。  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 渭南市| 房产| 会泽县| 镇坪县| 长沙县| 隆子县| 涟水县| 来安县| 隆化县| 红原县| 乐至县| 康定县| 贵南县| 淮阳县| 韩城市| 城口县| 大渡口区| 平定县| 安宁市| 南川市| 砀山县| 山丹县| 白银市| 禄丰县| 兰西县| 高雄市| 汽车| 随州市| 五大连池市| 金沙县| 乌审旗| 岳阳市| 天柱县| 慈溪市| 永顺县| 封开县| 天峨县| 香格里拉县| 五峰| 黑龙江省| 随州市|