1. 程式人生 > >JavaWeb---JSTL標籤庫

JavaWeb---JSTL標籤庫

JSTL標籤庫
    對EL表示式的擴充套件,Apache提供,匯入jar包
    四大庫:
        core:核心庫,重點
        fmt:格式化:日期、數字
        sql:過時
        xml:過時
     xml匯入庫:<%@taglib prefix="字首" uri="路徑"%>
核心庫:core --> c標籤
    1. out和set
       <c:out>:輸出
           value:可以是字串常量,也可以是EL表示式
           default:當要輸出的內容為null時,會輸出default指定的值
           escapeXml:預設值為true,表示轉義!
       <c:set>:設定(建立域的屬性)
           var:變數名
           value:變數值,可以是EL表示式
           scope:域,預設為page,可選值:page、request、session、application

    2. remove
       <remove>:刪除域變數
            var:變數名
            scope:如果不指定scope,預設刪除所有域中的該名稱的變數

    3. url
            value:指定一個路徑!它會在路徑前面自動新增專案名。
                <c:url value="/index.jsp"/>,它會輸出project1/index.jsp
            子標籤:<c:param>,用來給url後面新增引數,
                例如: <c:url value="/index.jsp">
                            <c:param name="username" value="張三"/>  
                            <!--可以對引數進行url編碼!!-->
                       </c:url>
                結果為:/project1/index.jsp?username=%ED%2C%3F%ED%2C%3F
            var:指定變數名,url標籤就不會再輸出到頁面,而是把生儲存到域中
            scope:它與var一起使用,用來儲存url。

    4. if:對應java中的if語句
            <c:if test="布林型別">...</c:if>,當test為1時,執行標籤體內容!

    5. choose:它對應java中的if/else if/ ... /else
      例如:
        <c:choose>
          <c:when test="">...</c:when>
          <c:when test="">...</c:when>
          <c:when test="">...</c:when>
           ... 
          <c:otherwise> ...</c:otherwise>
        </c:choose>
        等同與
            if(...) {....}
            else if(....){...}
            else if(....){...}
            else if(....){...}
            else {...}

    6. forEach 它用來迴圈遍歷陣列、集合!用來計數方式實現迴圈!

        計數方式:
          <c:forEach var="i" begin="1" end="10">
            ${i}
          </c:forEach>

          等價 for(int i = 1; i <= 10; i++) {
                    System.out.println(i);
                }

          屬性:
                var:迴圈變數
                begin:設定迴圈變數從幾開始。
                end:設定迴圈變數到幾結束。
                step:設定步長!等同與java中的i++,或i+=2。step預設為1

        迴圈狀態:可以使用varStatus來建立迴圈狀態變數!

        迴圈狀態變數有如下屬性:
            varStatus:迴圈變數
            count:  迴圈元素的個數
            index:  迴圈元素的下標
            first:  是否為第一個元素
            last:   是否為最後一個元素
            current:當前元素

        <c:forEach items="${list }"  varStatus="vs">
            ${vs.index} ${vs.count } ${vs.first } ${vs.last } ${vs.current }<br/>
        </c:forEach>
===============================================================
fmt庫:格式化庫
        <fmt:formatDate  value=""    pattern="">
            value:指定一個Date型別的變數
            pattern:用來指定輸出的模板!例如:yyyy-MM-dd HH:mm:ss

            <fmt:formatNumber value="${num1}" pattern="0.00">
              保留小數點後2位,它會四捨五入!如果不足2位,以0補位!

            <fmt:formatNumber value="${num1}" pattern="#.##">
              保留小數點後2位,它會四捨五入!如果不足2位,不補位!
===============================================================
自定義標籤
步驟:
      1.標籤處理類(標籤也是一個物件,那麼就需要先有類!)
      2.tld檔案,它是一個xml
      3.頁面中使用<%@taglib%>來指定tld檔案的位置

標籤處理類
  SimpleTag介面:
      * doTag():每次執行標籤時都會呼叫這個方法;
      * getParent():返回父標籤(非生命週期方法)
      * setParent(JspTag):設定父標籤
      * setJspBody(JspFragment):設定標籤體
      * setJspContext(JspContext):設定jsp上下文物件,它兒子是PageContext

  其中doTag()會在其他三個方法之後被tomcat呼叫。

配置tld檔案
    tld檔案一般都放到WEB-INF之下,保證客戶端訪問不到!
          <tag>
            <name>myTag1</name> 指定當前標籤的名稱
            <tag-class>tag.MyTag1</tag-class> 指定當前標籤的標籤處理類!
            <body-content>empty</body-content> 指定標籤體的型別,這裡使用的是空標籤
          </tag>

頁面中指定tld檔案位置
    <%@ taglib prefix="it" uri="/WEB-INF/tlds/it-tag.tld" %>
    導標籤庫,為頁面指定tld檔案的位置!

標籤屬性
    標籤處理類新增屬性,屬性至少要且一個set方法!這個set方法會在doTag()方法之前被tomcat執行!所在doTag()中就可以使用屬性了
步驟:
    1. 給標籤處理類新增屬性
    2. 在tld檔案中對屬性進行配置
        <attribute>
            <name>test</name> 指定屬性名
            <required>true</required> 指定屬性是否為必需的
            <rtexprvalue>true</rtexprvalue> 指定屬性是否可以使用EL
        </attribute>