JSTL參考

1.JSTL 1.1(JavaServer Pages Standard Tag Library)
JSTL分為五大類:
1. Core Tag Library
   前置名稱@: c URI:http://java.sun.com/jsp/jstl/core
2. I18N-capable for formatting tag library  (晚一點講)
   前置名稱: fmt URI:http://java.sun.com/jsp/jstl/fmt
3. SQL tag library  (不會講)
   前置名稱: sql URI:http://java.sun.com/jsp/jstl/sql
4. XML tag library  (不會講)
   前置名稱: xml URI:http://java.sun.com/jsp/jstl/xml
5. Function tag library
   前置名稱: fn URI:http://java.sun.com/jsp/jstl/functions

JSTL也支持EL語法。
<c:out value="<%=userList.getUser().getPhoneNumber()%>"/>
等於
<c:out value="${userList.user.phoneNumber}"/>

JSTL 1.1必須在支持Servlet2.4且JSP2.0以上的版本的Container才可以使用。
主要由Apache組織的Jakarta Project所實現的。
http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/下載

JSTL 1.0 的 uri為http://java.sun.com/jstl/core
JSTL 1.1 的 uri為http://java.sun.com/jsp/jstl/core
JSTL 1.0少了 jsp/

在jsp網頁中使用JSTL時,一定要先做聲明
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
一般的前置名稱都是c,不過uri必須http://java.sun.com/jsp/jstl/core

2. Core tag library
表達式操作:output, set, remove,catch
流程控制:if, choose, when, otherwise
Iterate 操作:forEach, forTokens
URL 操作:import, url, redirect

備註:[] 為不一定需要的屬性
      {} 為選擇
2.1 表達式操作
- <c:out>
  a. <c:out value="value" [escapeXML="{true|false}"] [default="defaultValue"]/>
  b. <c:out value="value" [escapeXML="{true|false}"]>
     defaultValue
     </c:out>
     escapeXML:是否轉換特殊字符,預設是true。
     default:如果value的值為null,則顯示default的值
     < &lt;
     > &gt;
     ' &#039;
     " &#034;
     & &amp;
   範例:* <c:out value="${3 + 5}"/>
         * <c:out value="<p>Special</p>" escape="false" />
  
   N.B. 若value為null,會顯示default的值:如沒有default的值,則顯示 一個空的字符串。
- <c:set>
  a. <c:set value="value" var="varName" [scope="{page|request|session|application}"]/>   
  b. <c:set var="varName" [scope="{page|request|session|application}"]>
     value
     </c:set>
  c. <c:set value="value" target="target" property="propertyName"/>
  d. <c:set target="target" property="propertyName">
      value
     </c:set>
     var: 欲存入的變數名稱
     scope:var變數的JSP範圍
     target: 為一個JavaBean 或java.util.Map物件
     property:target物件的屬性
  範例:* <c:set var="number" scope="request" value="${1+1}" />
        * <c:set var="number" scope="session">
          ${1+1}
          </c:set>
        *3 <c:set var="number" scope="request" value="${param.number}"/>
        *4 <c:set target="UserDTO" property="name" value="${param.username}"/>
        *3 與 *4 的value為null有差別:
        *3 ${param.number} 為 null,則會移除Request範圍的number變數
        *4 ${param.username} 為 null 時,則會設定UserDTO(JavaBean)的name屬性為null
- <c:remove>
  a. <c:remove var="varName" [scope="{page|request|session|application}"] />
  <c:remove>必須要有var屬性,即要被刪除的屬性名稱,scope 可有可無。
  若沒有設定scope,則將會刪除所有範圍(page, request, session, application)
  名稱為number的數據。
- <c:catch> 
  主要用來處理產生錯誤的異常狀況,並且將錯誤信息存起來。
  範例:
  <c:catch var="errorMessage">
  <%
    String eFormat = "not number";
    int i = Integer.parseInt(eFormat);
  %>
  </c:catch>
  ${errorMessage}  

2.2 流程控制
- <c:if>
  a. <c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>
  b. <c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>
     本體內容
     </c:if>
     test:如testCondition為true,則執行本體內容
     var :用來存test運算後的結果。
     範例:
     <c:if test="${param.username == 'admin'}">
     ADMIN 你好!
     </c:if>
- <c:choose> 本身只當<c:when>和<c:otherwise>的父標籤
  本體內容只能有:
  * 空白
  * 1或多個 <c:when>
  * 0 或1個 <c:otherwise>
  <c:choose>
    ..
    <c:when>
    </c:when>
    <c:otherwise>
    </c:otherwise>
  </choose> 
- <c:when> 
  <c:when test="testCondition">
  本體內容
  </c:when>
- <c:otherwise>      
  在同一個中<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>
  </choose>
 
2.3 Iterate 操作
- <c:forEach>
  a. <c:forEach [var="varName"] items="collection" [varStatus="varStatusname"] [begin="begin"] [end="end"] [step="step"]>
     本體內容
     </c:forEach>
  b. <c:forEach [var="varName"] [varStatus="varStatusname"] begin="begin" end="end" [step="step"]>
     本體內容
     </c:forEach>
     items: Arrays,Collection,Iterator,Enumeration,Map,String
     varStatus: 用來存放現在指到的相關成員信息
     begin:開始的位置
     end:結束的位置
     step:每次的間隔數,不可以小於1
    
- <c:forTokens>
  用來瀏覽一字符串所有的成員,其成員由定義符號(delimiters)所分隔的。
  <c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
  本體內容
  </c:forTokens>
  var:用來存放現在指到的成員
  items: 被iterate的字符串
  delims:定義用來分割字符串的字符
  varStatus: 用來存放現在指到的相關成員信息
  begin:開始的位置
  end:結束的位置
  step:每次的間隔數 
  例:
  <c:forTokens items="A,B,C,D,E" delims="," var="item">
  ${item}
  </c:forTokens>
  <c:forTokens items="A,B;C-D,E" delims=",;-" var="item">
  ${item}
  </c:forTokens>
  結果:A B C D E(分成五次列出)
 
2.4 URL 操作
- <c:import>
  a. <c:import url="url" [context="context"] [var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]>
     本體內容
     </c:import>
  b. <c:import url="url" [context="context"] varReader="varReaderName"] [charEncoding="charEncoding"]>
     本體內容
     </c:import>
     假如url為null或空時,會產生JspException
     範例:
     * <c:import url="http://java.sun.com" />
     就是把http://java.sun.com的內容加到網頁中。
     * <c:import url="ftp://ftp.cse.yzu.edu.tw/data.txt" />
     將把data.txt 的內容顯示出來。
     * <c:import url="/images/copyright.jsp" var="copyright" scope="application">
     在application範圍,存這個copyright變數;對常用的動作會更方便   
- <c:url>
  <a href="<c:url value="http://www.javaworld.com.tw">
    <c:param name="param" value="value" />
  </c:url>"></a>
  =>
  <a href="http://www.javaworld.com.tw?param=value"></a>
 
  <img src="<c:url value="/images/code.gif"/>" />
- <c:redirect>
  url就是設定要被導向到目標地址
  <c:redirect url="http://www.javaworld.com.tw" />
  <c:redirect url="/jsp/index.html" context="/others">

6. Function tag library
   <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
- ${<fn:contains(string,substring)>} => boolean
  判斷某字符串是否在一字符串之中
  <c:set var="s1" value="There is a castle on a cloud"/>
  ${fn:contains(s1,"castle")} => true
- ${<fn:containsIgnoreCase(string,substring)>} => boolean
  判斷某字符串是否在已有字符串之中,並忽略其大小寫。
  <c:set var="s1" value="There is a castle on a cloud"/>
  ${fn:containsIgnoreCase(s1,"there")} => true
- ${<fn:startsWith(string,prefix)>} => boolean
  判斷一字符串是否以某一字符串為開頭。
  <c:set var="s1" value="There is a castle on a cloud"/>
  ${fn:startsWith(s1,"castle")} => false
- ${<fn:endsWith(string,suffix)>} => boolean
  判斷一字符串是否以某一字符串之後。
  <c:set var="s1" value="There is a castle on a cloud"/>
  ${fn:endsWith(s1,"castle")} => false 
  ${fn:endsWith(s1,"cloud")} => true
- ${<fn:escapeXml(string)>}
  用來轉換字符。<,>,',",和&轉換為&lt;,&gt;,&#039;,&#034;和&amp;
  ${fn:escapeXml("<foo>body of foo</foo>")}
  會顯示 <foo>body of foo</foo>
- ${<fn:indexOf(string,substring)>} => int
  用來計算substring在string中第一次相等的位置。
  <c:set var="s1" value="There is a castle on a cloud"/>
  ${fn:indexOf(s1,"castle")} => 11
- ${<fn:split(string,delimiters)>} => string[]
  將字符串分離成衣字符串數組
  delimiters:用來分離的字符串符號
- ${<fn:join(array,seperator)>} => string
  將陣列中的全部元素以指定字符串作為連接符,回傳結合後的字符串。
- ${<fn:replace(inputString,beforeSubstring,afterSubstring)>} => string
  inputString -> 原輸入的字符串
  beforeSubstring -> 要替換的字符串
  afterSubstring -> 替換成為字符串
  Result -> 取代後的字符串
- ${fn:trim(string)} => string
  去除字符串的前後空白
- ${fn:substring(string,beginIndex,endIndex)} => string
  抽取字符串中的某一子字符串
- ${fn:substringAfter(string,substring)} => string
  抽取字符串中某子字符串之後的字符串
- ${fn:substringBefore(string,substring)} => string
  抽取字符串中某子字符串之前的字符串
  範例:
  <c:set var="s1" value="There is a castle on a cloud"/>
  ${fn:substring(s1, 11, 17)} => castle
  ${fn:substringAfter(s1, "There")} => is a castle on a cloud
  ${fn:substringBefore(s1, "on a")} => There is a castle
- ${fn:toLowerCase(string)}轉換為小寫字符
- ${fn:toUpperCase(string)}轉換為大寫字符
- ${fn:length(input)} => integer
  回傳一集合對象的數量或一字符串中的字符數。
  input:原輸入
  <c:set var="s1" value="There is a castle on a cloud"/>
  ${fn:length(s1)} => 28

你可能感兴趣的:(jstl)