JSTL(1.1)之Core tag Libray

          Posted on 2006-07-04 13:47 多力宇揚 閱讀(587) 評論(0)  編輯  收藏 所屬分類: View tier

          JavaServer Pages Standard Tag Libray(1.1),其中文名字為JSP標準標簽函數庫。JSTL是一個標準的已
          制定好的標簽庫,可以應用于各種領域,如:基本輸入輸出,流程控制,循環,XML文件剖析,數據庫查
          詢以及國際化和文字格式標準化的應用等。JSTL所提供的標簽庫分為以下五大類:
          ?核心標簽庫(Core tag Liabry)
          ?I18N格式標簽庫(I18N-capable formatting tag libary)
          ?SQL標簽庫(SQL tag Libary)
          ?XML標簽庫(XML tag Libary)
          ?函數標簽庫(Functions tag Libary)

          核心標簽庫(Core tag Liabry)主要有:基本輸入輸出,流程控制,迭代操作和URL操作。
          ?----------------------------------------------------------------------------
          ????? 分類??????????? 功能分類?????????????????標簽分類
          ???????????????????????????????????????????????????????????? out
          ????????????????????????????????????????????????????????????? set
          ???????????????????????? ?表達式操作???????????????????? remove
          ?????????????????????????????????????????????????????????????????? catch
          ??
          ???? Core????????????????????????????????????????????????????? if
          ?????????????????????????????????????????????????????????????????? choose
          ????????????????????????? ?流程控制?????????????????????????? ?when
          ?????????????????????????????????????????????????????????????????????? outherwise

          ??????????????????????????????????????????????????????????????????? forEach
          ??????????????????????????? ? 迭代操作????????????????????? forTokens

          ???????????????????????????????????????????????????????????????????? ? import
          ???????????????????????????????????????????????????????????????????????? ?param
          ????????????????????????????????????????????????????????????????????? ?url
          ?????????????????????????????? ? URL操作????????????????????????? param
          ???????????????????????????????????????????????????????????????????? redirect
          ?????????????????????????????????????????????????????????????????????????? param
          ------------------------------------------------------------------------------------------
          在JSP中使用JSTL中的標簽庫時,必須使用<%@taglib%>指令,并且設定prefix和uri的值得,通常設定:
          <%@taglib prefix="c" uri=">
          這樣就可以使用核心標簽庫了。

          .表達式操作
          ?表達式操作分類中包含四個標簽: <c:out>,<c:set>,<c:remove>和<c:catch>
          <c:out>:重要用來顯示數據的內容,類似與<%=scripting-language%>。它的語法如下:
          語法1: 沒有body內容
          <c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/>

          語法2: 有body內容
          <c:out value="value"? [escapeXml="{true|false}"]>
          ? default value
          </c:out>

          Attribute
          -----------------------------------------------------------------------------------------------------------------------
          ?名稱?????????????????? ?? 說明???????????????????????????????????????????????????????????????EL???? 類型???? 必須?????? 默認值
          value????????????????? 需要顯示的值?????????????????????????? ????????????????????????? Y????? Object??? 是????????? 無
          default?????????????? 如果value值為null,則顯示default的值??????????????? ? Y????? Object??? 否????????? 無
          escapeXml??????? 是否轉換特殊字符,如: <轉換為&It?????????????????Y????? Object??? 否????????? true
          ----------------------------------------------------------------------------------------------------------------------
          Null和錯誤說明
          假若value為null,會顯示default的值;假若沒有設定default的值,則會顯示一個空的字符串。

          <c:set>:主要用來把變量存儲至JSP范圍或是JavaBean的屬性中。
          語法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>

          Attribute
          ----------------------------------------------------------------------------------------
          ?名稱????????????????????說明??????????????????????????????????????????????EL???? 類型????? 必須??????默認值
          value?????????????要被存儲的值????????????????????????????????????? Y????? Object????? 否????????? 無
          var????????????????欲存入的變量名??????????????????????????????????N????? String??????? 否????????? 無
          scope????????????var變量的JSP范圍???????????????????????????????N????? String??????? 否???????? page
          target????????????為一JavaBean或java.util.Map對象????????Y????? Object????? ?否????????? 無
          property????????指定target對象屬性??????????????????????????????Y????? String??????? 否????????? 無
          ------------------------------------------------------------------------------------------
          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}"

          <c:remove>:主要用來移除變量。
          語法:
          <c:remove var="varName" [scope="{page|request|session|application}"]/>

          Attribute
          ----------------------------------------------------------------------------------------
          ?名稱???????????????? 說明???????????????????????????????????? EL???? 類型???? 必須?????? 默認值
          ?var???????????? 欲移除變量的名稱???????????????????? N????? String???? 是?????????? ?? 無
          ?scope?????????? var變量的JSP范圍????????????????????N????? String???? 否???????????? page
          ----------------------------------------------------------------------------------------
          說明:
          <c:remove>必須要有var屬性,即要被移除的屬性名稱,scope則可有可無,如:
          <c:remove var="username" scope="session"/>
          將username變量從session范圍移除。若我們不設定scope,則<c:remove>會移除所有范圍名稱為username
          的數據。

          <c:catch>:主要用來處理產生錯誤的異常情況,并且將信息保存起來。
          語法:
          <c:catch [var="varName"]>
          ?...欲抓取錯誤的部分...
          </c:catch>

          Attribute
          ----------------------------------------------------------------------------------------
          ?名稱???????????????? 說明?????????????????????????????????????????? EL???? 類型???? 必須?????? 默認值
          ?var?????????? 用來存儲錯誤信息的變量???????????????? N????? String?????? 否????????? 無
          -----------------------------------------------------------------------------------------
          說明:
          <c:catch>主要將可能發生錯誤的部分放在<c:catch>和</c:catch>之間。如果真的發生錯誤,可將錯誤
          信息保存至變量varName標量中,如:
          <c:catch var="message">
          ??? //可能發生錯誤的部分
          </catch>
          另外,當錯誤發生<c:catch>和</c:catch>之間時,只有<c:catch>和</c:catch>之間的程序會被中止忽
          略,但整個網頁不會被中止。

          流程控制
          流程控制分類中包含四個標簽:<c:if>,<c:choose>,<c:when>和<c:otherwise>。

          <c:if>:的用途和我們在一般程序中寫的if一樣。
          語法:
          語法1:沒有body
          <c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>

          語法2: 有body
          <c:if test="testCondition" [var="varName"] [scope="{page|request|session|appliation}"]>
          ? ...body....
          </c:if>

          Attribute
          ------------------------------------------------------------------------------------------------------------------------
          ?名稱?????????????????????????? 說明?????????????????????????????????????????????????????????????????????????? EL???? 類型???? ? ?必須?????? 默認值
          test?????????????????? 如果表達式的結果為true則執行body,false則相反????????????? Y????? boolean????? ?是????????? ?無
          var????????????????? ?用來存儲test運算后的結果,即true或false?????????????????????? ?? ?N?????String?????? ?? 否???????? ? 無
          scope?????????????? var變量的JSP范圍????????????????????????????????????????????????????????????????? N?????String???????? ?否??????? ? page
          ------------------------------------------------------------------------------------------------------------------------
          說明:
          <c:if>標簽必須要有test屬性,body里除了能是靜態文本之外可以是任何JSP代碼,標簽或HTML代碼。

          <c:choose>:本身只當作<c:when>和<c:otherwise>的父標簽。
          語法:
          <c:choose>
          ? body(<when>和<otherwise>)
          </c:choose>
          限制:
          <c:choose>的本地內容只能有:
          ?.空白
          ?.1或多個<c:when>
          ?.0或多個<c:otherwise>
          如:
          <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:choose>中,假如所有的<c:when>的test都不為true時,則執行<c:otherwise>的本體內容。
          在同一個<c:choose>中,假若有好幾個<c:when>都會true時,只能有一個<c:when>成立。

          迭代操作
          迭代(Iterator)操作主要包含兩個標簽: <c:forEach>和<c:forTokens>。

          <c:forEach>為循環控制,它可以將集合(Collection)中的成員循序瀏覽一遍。運做方式為當條件符合
          時,就會持續重復執行<c:forEach>的body內容。
          語法:
          語法1: 迭代一集合對象之所有成員
          <c:forEach [var="varName"] items="collection" [varStatus="varStatusName"]
          ?????????? [begin="begin"] [end="end"] [step="step"]>
          ?...body內容.....
          <c:forEach>

          語法2: 迭代指定的次數
          <c:forEach [var="varName"] [varStatus="varStatusName"]
          ?????????? begin="begin" end="end" [step="step"]>
          ?...body內容.....
          <c:forEach>

          Attribute
          --------------------------------------------------------------------------------------------------------------------------
          ?名稱???????????????? 說明??????????????????????????????????? ?????????????? EL???? 類型??????? ? ?? 必須?????? 默認值
          ?var????????? 用來存放現在指到的成員????????????????????????? N????? String????????????? ?否????????? ?無

          ???????????????????????????????????????????????????????????????????????????????????????????????Arrays
          ????????????????????????????????????????????????????????????????????????????????????????????? Collection
          ???????????????????????????????????????????????????????????????????????????????????????????????Iterator?????????? ? 否????????? ?無
          items???????? 被迭代的集合對象??????????????????????????????????? Y?????? ?Enumeration????????????
          ?????????????????????????????????????????????????????????????????????????????????????????????? Map
          ????????????????????????????????????????????????????????????????????????????????????????????????String

          varStatus???? 用來存放到指到的相關成員信息??????????N?????? ?String???????????? ? 否?????????? 無
          begin?????????? 開始的位置?????????????????????????????????????????? ? Y???????? ?int???????????????? ? ?否????????? ?0
          end?????????? ?? 結束的位置???????????????????????????????????????????? Y???????? ?int????????????????? ?否????????? ?最后一個成員
          setp???????????? 每次迭代的間隔數???????????????????????????????? Y???????? ?int??????????????? ? ?否?????????? ?1
          -------------------------------------------------------------------------------------------------------------------------
          Null 和 錯誤處理
          .假若items為null時,則表示為一空的集合對象
          .假若begin大于或等于items時,則迭代不運算
          注意:
          varName的范圍只存在<c:forEach>的本體中,如果超出了本題,則不能取得varName的值。如:
          <c:forEach items="${atts}" var="item">
          </c:forEach>
          ${item}</br>
          ${item}則不會顯示item的內容。<c:forEach>除了支持數組之外,還有標準的J2SE的結合類型,例如:
          ArrayList,List,LinkedList,Vector,Stack和Set等等;另外包括java.util.Map類的對象,例如:
          HashMap,Hashtable,Properties,Provider和Attributes。

          另外<c:forEach>還提供了varStatus屬性,主要用來存放現在指到成員的相關信息。例如:我們寫成
          varStatus="s",那么就會把信息存放到名稱為s的屬性當中。varStatus屬性還提供另外四個屬性:index,
          count,fist和last,它們個自的意義如下:
          ------------------------------------------------------------------------------------------
          ?? 屬性??????????????????? 類型?????????????????????????????????? 意義
          ?? index?????????????????? number????????????????????? 現在指到成員的索引
          ?? count?????????????????? number????????????????????? 總共指到成員的總和
          ?? first?????????????????? ? boolean???????????????????? 現在指到成員是否為第一個
          ?? last??????????????????? ?boolean???????????????????? 現在指到成員是否為最后一個
          -------------------------------------------------------------------------------------------
          如下例子:
          <
          %@page contentType="text/html;charset=gb2312"%>
          <%@taglib prefix="c" uri=">
          <%
          ?String atts[] = new String[5];
          ?atts[0]="hello";
          ?atts[1]="this";
          ?atts[2]="is";
          ?atts[3]="a";
          ?atts[4]="girl";
          ?request.setAttritue("atts",atts);
          %>
          <c:forEach items="${atts}" var="item" varStatus="s">
          <h2><c:out value="${item}"/>的四種屬性></h2>
          ?index: ${s.index}</br>
          ?count: ${s.count}</br>
          ?first: ${s.first}</br>
          ?last:? ${s.last}</br>
          </c:forEach>

          <c:forTokens>
          <c:forTokens>:用來瀏覽一字符串中所有的成員,起成員是由定義符號(delimiters)所分隔的。
          語法:
          <c:forTokens items="stringFoTokens" delims="delimmmmiters" [var="varName"]
          ???????????? [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
          ?...body內容....
          </c:forTokens>

          Attribute
          --------------------------------------------------------------------------------------------------------------------
          ?名稱?????????????????????????????? ???? 說明????????????????????????????????????????????? ?EL???? 類型????? 必須?????? 默認值
          ?var???????????????? ? 用來存放現在指到的成員???????????????????????????? ?? Y????? String????? ?否????????? 無
          ?items??????????????? 被迭代的字符串????????????????????????????????????????????? ? Y????? String?????? 是????????? 無
          ?delims??????????? ? 定義用來分割字符串的字符????????????????????????? ? N????? String????? ?是????????? 無
          ?varStatus??????????用來存放現在指到的相關成員信息????????????? ? N????? String???? ? 否????????? 無
          ?begin????????????? ?開始的位置?????????????????????????????????????????????????????? ? Y?????? int???????? ? 否????????? ?0
          ?end??????????????? ?結束的位置????????????????????????????????????????????????????????? Y?????? int????????? 否?????????? 最后一個成員
          ?step???????????? ?? 每次迭代間隔數??????????????????????????????????????????????? ? Y?????? int?????????? 否?????????? 1
          ---------------------------------------------------------------------------------------------------------------------
          限制:
          .假若有begin屬性時,begin必須大于等于0
          .假若有end屬性時,必須大于begin
          .假若有step屬性時,step必須大于等于1

          Null 和 錯誤處理
          .假如itmes為null時,則表示為有空的集合對象
          .假若begin大于等于items的大小時,則迭代不運算

          例子:
          <c:forToken items="A,B,C,D,E,F,G" delims="," var="item>
          ${item}
          </c:forToken>
          items屬性也可以用EL,例如:
          <%
          ?String phonenumber="123-456-7899";
          ?request.setAttribute("userPhone",phonenumber);
          %>
          <c:forTokens items="${userPhone}" delims="-" var="item">
          ${item}
          </c:forTokens>

          URL操作
          JSTL包含三個URL操作有關的標簽,分別是: <c:import>,<c:redirect>和<c:url>。它們的主要功能是:
          用來將其他文件的內容包含起來,網頁的向導,還有url的產生。


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


          網站導航:
           
          主站蜘蛛池模板: 张北县| 元江| 甘南县| 临颍县| 麻江县| 黔西| 手游| 荔波县| 年辖:市辖区| 游戏| 合江县| 启东市| 福海县| 泗水县| 温泉县| 丹江口市| 娱乐| 青田县| 闻喜县| 泗水县| 靖边县| 高碑店市| 太和县| 龙山县| 黄骅市| 绍兴县| 甘谷县| 天水市| 黄浦区| 龙江县| 海盐县| 原平市| 衢州市| 安远县| 万年县| 辽阳市| 宜川县| 德州市| 库伦旗| 江川县| 安吉县|