隨筆-84  評論-56  文章-0  trackbacks-0

          JavaServer Pages Standard Tag Libray(1.1),其中文名字為JSP標(biāo)準(zhǔn)標(biāo)簽函數(shù)庫。JSTL是一個(gè)標(biāo)準(zhǔn)的已
          制定好的標(biāo)簽庫,可以應(yīng)用于各種領(lǐng)域,如:基本輸入輸出,流程控制,循環(huán),XML文件剖析,數(shù)據(jù)庫查
          詢以及國際化和文字格式標(biāo)準(zhǔn)化的應(yīng)用等。JSTL所提供的標(biāo)簽庫分為以下五大類:
          核心標(biāo)簽庫(Core tag Liabry)主要有:基本輸入輸出,流程控制,迭代操作和URL操作。
          在JSP中使用JSTL中的標(biāo)簽庫時(shí),必須使用<%@taglib%>指令,并且設(shè)定prefix和uri的值得,通常設(shè)定:
          <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
          這樣就可以使用核心標(biāo)簽庫了。

          .表達(dá)式操作
          表達(dá)式操作分類中包含四個(gè)標(biāo)簽: <c:out>,<c:set>,<c:remove>和<c:catch>
          <c:out>:重要用來顯示數(shù)據(jù)的內(nèi)容,類似與<%=s.c.r.i.p.ting-language%>。它的語法如下:
          語法1: 沒有body內(nèi)容
          <c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/>

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

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

          <c:set>:主要用來把變量存儲至JSP范圍或是JavaBean的屬性中。
          語法1: 沒有body
          將value的值存儲至范圍為scope的varName變量之中
          <c:set value="value" var="varName" [scope="{page|request|session|application}"]/>

          語法2: 有body
          將body內(nèi)容存儲至范圍為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內(nèi)容的數(shù)據(jù)存儲至target對象屬性中
          <c:set target="target" property="propertyNmae">
          body....
          </c:set>

          Attribute
          ----------------------------------------------------------------------------------------
          名稱                     說明                                               EL      類型       必須       默認(rèn)值
          value              要被存儲的值                                       Y       Object       否           無
          var                 欲存入的變量名                                   N       String         否           無
          scope             var變量的JSP范圍                                N       String         否          page
          target             為一JavaBean或java.util.Map對象         Y       Object        否           無
          property         指定target對象屬性                               Y       String         否           無
          ------------------------------------------------------------------------------------------
          Null 和 錯(cuò)誤處理:
          語法3和語法4會產(chǎn)生異常錯(cuò)誤,有以下兩種情況:
          .target 為null
          .target 不是java.util.Map或JavaBean對象
          假若value為null時(shí):將由存儲變量改為移除變量
          .語法1: 由var和scope所定義的變量,將被移除
               .若scope已指定時(shí),則PageContext.removeAttribute(varName,scope);
               .若scope未指定時(shí),則PageContext.removeAttribute(varName);
          .語法3:
               .假若target為Map時(shí),則Map.remove(property);
               .假若target為JavaBean時(shí),propertye指定的屬性為null
          注意: var和scope這兩個(gè)屬性不能使用表達(dá)式來表示,我們不能寫成 scope="${ourScope}"或var="${a}"

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

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

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

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

          流程控制
          流程控制分類中包含四個(gè)標(biāo)簽:<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      類型         必須        默認(rèn)值
          test                    如果表達(dá)式的結(jié)果為true則執(zhí)行body,false則相反               Y       boolean        是            無
          var                    用來存儲test運(yùn)算后的結(jié)果,即true或false                            N      String           否            無
          scope                var變量的JSP范圍                                                                   N      String           否           page
          ------------------------------------------------------------------------------------------------------------------------
          說明:
          <c:if>標(biāo)簽必須要有test屬性,body里除了能是靜態(tài)文本之外可以是任何JSP代碼,標(biāo)簽或HTML代碼。

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

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

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

          語法2: 迭代指定的次數(shù)
          <c:forEach [var="varName"] [varStatus="varStatusName"]
                      begin="begin" end="end" [step="step"]>
          ...body內(nèi)容.....
          <c:forEach>

          Attribute
          --------------------------------------------------------------------------------------------------------------------------
          名稱                  說明                                                    EL      類型              必須        默認(rèn)值
          var           用來存放現(xiàn)在指到的成員                           N       String                否            無

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

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

          另外<c:forEach>還提供了varStatus屬性,主要用來存放現(xiàn)在指到成員的相關(guān)信息。例如:我們寫成
          varStatus="s",那么就會把信息存放到名稱為s的屬性當(dāng)中。varStatus屬性還提供另外四個(gè)屬性:index,
          count,fist和last,它們個(gè)自的意義如下:
          ------------------------------------------------------------------------------------------
              屬性                     類型                                    意義
              index                    number                       現(xiàn)在指到成員的索引
              count                    number                       總共指到成員的總和
              first                      boolean                      現(xiàn)在指到成員是否為第一個(gè)
              last                      boolean                      現(xiàn)在指到成員是否為最后一個(gè)
          -------------------------------------------------------------------------------------------
          如下例子:
          <%@page contentType="text/html;charset=gb2312"%>
          <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
          <%
          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內(nèi)容....
          </c:forTokens>

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

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

          例子:
          <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包含三個(gè)URL操作有關(guān)的標(biāo)簽,分別是: <c:import>,<c:redirect>和<c:url>。它們的主要功能是:
          用來將其他文件的內(nèi)容包含起來,網(wǎng)頁的向?qū)В€有url的產(chǎn)生。

          posted on 2008-11-21 01:47 憶風(fēng) 閱讀(605) 評論(0)  編輯  收藏 所屬分類: Java EE
          主站蜘蛛池模板: 浙江省| 彰化县| 定陶县| 城市| 奉节县| 静海县| 永吉县| 增城市| 泰安市| 宜昌市| 滦平县| 邢台县| 尉氏县| 舟山市| 嵩明县| 仙游县| 大化| 旌德县| 巴塘县| 房山区| 双牌县| 大埔区| 龙海市| 东兴市| 溧阳市| 湘潭县| 师宗县| 金阳县| 南郑县| 普兰县| 文安县| 临漳县| 鲜城| 德格县| 上林县| 固镇县| 香港| 二手房| 北川| 咸宁市| 定襄县|