c標籤相關

JSTL標籤用法  
關鍵字:JSTL標籤、<c:choose>、<c:forEach>、<c:forTokens>、<c:if>、<c:import>、<c:otherwise>、<c:out>、<c:param>、<c:redirect>、<c:remove>、<c:url>、<c:when>、<c:set>、<c:catch>  
原來一直沒有看過,我說過我是新手,但是好多資料上似乎也不重視 JSTL 。我看項目源代碼發現其中使用到了這個標籤庫,感覺其還真是方便,頁面看起來更加清爽。減少了 JAVA 程序員親自寫的代碼量,還真驗證了,不懶不做程序員,程序員如果寫代碼不想着偷懶,那麼生活是很無趣的。  
下面總結總結,學習學習。:)  
JSP 標準標記庫( Standard Tag Library , JSTL) 是一組以標準化格式實現許多通用的 Web 站點功能的定製標記。  
JSP 技術的優勢之一在於其定製標記庫工具。除了核心 JSP 標記,如 jsp:include 之外,定製標記庫工具使您能夠創建唯一的標記來描述以站點或應用程序爲導向的操作。一旦您創建了定製標記庫 ( 簡稱 taglib) ,當您擴展項目或轉向另一個項目時您可以重複使用這些標記。您還可以將 taglib 傳遞給其它開發人員,從而他們可以在自己的網站上使用,或者在您 Web 應用程序的其它部分使用。  
        
       JSTL 的目標是爲了簡化 JSP 頁面的設計。對於頁面設計人員來說,使用腳本語言(默認值是 JAVA 語言)操作動態數據是比較困難的,而採用標籤和表達式語言相對容易一些, JSTL 的使用爲頁面設計人員和程序開發人員的分工協作提供了便利。  
   
一. 配置 JSTL  
   
包括兩個 JAR 文件, jstl.jar 和 standard.jar 。是什麼沒有必要管,重在應用( 1+1 ? =2 ,我們沒有必要深究,只需要知道這麼用就行。)。  
   
原文引入:  
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>  
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>  
                                                                  
二. Core 標籤庫  
   
Core 標籤庫主要包括了一般用途的標籤、條件標籤、迭代標籤和 URL 相關的標籤。在 JSP 頁面使用 Core 標籤,要使用 taglig 指令,指定引用的標籤庫,如下:  
<%@ taglib rui=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>  
   
一般用途的標籤有 <c:out> 、 <c:set> 、 <c:remove> 、 <c:cath>  
1.<c:out>  
用於計算一個表達式並將結果輸出。類似於 JSP 中 <%=%> 表達式,或者是 EL 中 $ ${el-expression} 。  
   
2.<c:set>  
用於設置範圍變量的值或者 javabean 對象的屬性。  
看個實際例子:  
<c:set var=”username” value=”lisi” scope=”session”/>  
這樣就相當於設置了 session 。  
   
3.<c:remove>  
相對 <c:set> 其作用是移除範圍變量。比如: <c:remove var=”nusername” scope=”session”/>  
   
4.<c:catch>  
   
用於捕獲在其中嵌套的操作所拋出的異常對象,並將異常信息保存到變量中。  
我們將有可能拋出異常的代碼放置到開始標籤 :<c:catch> 和結束標籤 :</c:catch> 之間。如果其中代碼出現異常,異常對象將被捕獲,保存在 var 聲明的變量中,該變量總是有 page 範圍。如果沒有發生異常,而 var 所標識的範圍變量將被移除。  
如果沒有指定 var 屬性,異常只是簡單的被捕獲,異常信息並不會被保存。  
Eg :  
<c:catch var=”exception”>  
<%  
       int i = 5;  
       int j = 0;  
       int k=i/j;  
%>  
</c:catch>  
<c:out value=”${exception}” /><br>  
<c:out value=”${exception.massage}”/>  
後一句相當於: exception.getMessage()  
   
條件標籤包括 <c:if><c:choose><c:when><c:otherwise>  
1.<c:if>  
用於實現 java 中的 if 語句功能。  
   
<c:if test=”${user.visitCount==1}”>  
       This is your first visit .  
</c:if>  
   
若爲 true ,會打印中間部分。也可以聲明 var ,方便下一步判斷。  
<c:if test=”${param.name==’admin’}” value=”result”/>  
<c:out value=”${result}” />  
   
2.<c:choose>  
<c:choose> 和 <c:when> 、 <c:otherwise> 一起實現互斥條件執行,類似於 java 中的 if else.  
<c:choose> 一般作爲 <c:when> 、 <c:otherwise> 的父標籤。  
eg :  
<c:choose>  
       <c:when test="${row.v_money<10000}">  
              初學下海  
       </c:when>  
       <c:when test="${row.v_money>=10000&&row.v_money<20000}">  
              身手小試  
       </c:when>  
       <c:otherwise>  
              商業能手  
       </c:otherwise>  
</c:choose>  
   
迭代標籤  
迭代標籤有 <c:forEach> 和 </c:forEach>  
   
// 遍歷記錄集  
<c:forEach items="${finalResult.rows}" var="row">         
<tr class="<%=tdClass[(rank+1)%2]%>">  
<td align="center"><span><%=rank%> </span></td>  
<td align="center"><span ><c:out value="${row.player_name}"/></span> </td>  
<td align="center"><span > ¥ <c:out value="${row.money}"/></span></td>  
</tr>  
<%rank++;%>       
</c:forEach>  
   
也可以設定固定次數。  
<c:forEach var =”i” begin=”100 “ end= “110”>  
       ${i}  
</c:forEach>  
如果再加個 step= “ 2 ”那麼每次增長爲 2 。  
   
三. sql 標籤  
   
設置數據源:  
<sql:setDataSource dataSource="proxool.breadTycoon" />  
// 將數據庫某查詢的結果聲明爲一個變量  
<sql:query var="finalResult" >  
    select player_name,money from tb_player order by money DESC LIMIT 10     
</sql:query>  
       然後可以:  
<c:forEach items="${ finalResult.rows}" var="row" varStatus="s">  
        advCosts[${s.index}]=${row.adv_cost};  
   </c:forEach>  
       數據更新標籤:  
<sql:update>    
                call proc_set_role_salespro(?,?,?,?,?);  
                <sql:param value="30"/>  
                <sql:param value="39"/>  
                <sql:param value="<%=spID%>"/>  
                <sql:param value="<%=productID%>"/>  
                <sql:param value="1"/>                 
            </sql:update>  
   
<sql:query var="queryAllChannelCount">  
SELECT COUNT(*) as total FROM tb_channel WHERE game_id=? AND begin_round<func_cur_round(?) AND player_id=? AND channel_flag=0  
<sql:param value="${gameID}"/>  
<sql:param value="${gameID}"/>  
<sql:param value="${playerID}"/>  
</sql:query>  
<c:forEach items="${queryAllChannelCount.rowsByIndex}" var="channelCN">  
       <c:set value="${channelCN[0]}" var="channelTotal"/>  
</c:forEach>  
   
調用存儲過程更新數據庫:  
   
<c:if test="${param.changsubmit!=null}" >  
<c:forEach items="${paramValues.pro_id}" var="getpro_id" varStatus="getparamsta">  
<sql:update>  
   
call proc_set_role_product(?,?,?,?,?,?,?,?);  
   
<sql:param value="${gameID}"/>  
<sql:param value="${playerID}"/>  
<sql:param value="${getpro_id}"/>  
<sql:param value="${getpro_id}"/>  
<sql:param value="${paramValues.pro_sort[getparamsta.index]}"/>  
<sql:param value="${paramValues.price[getparamsta.index]}"/>  
<sql:param value="${paramValues.output[getparamsta.index]}"/>  
<sql:param value="0"/>  
</sql:update>  
</c:forEach>  
</c:if>  
四. 格式化標籤  
   
<fmt: formatNumber value =”12.3” pattern=”.000”/>  
將輸出 12.300. 應用樣式 ”.000”, 將使格式化後的小數部分有 3 位。不足 3 位將以 0 補齊。  
   
       <fmt:formatDate value=”<%=new java.util.Date() %>” type=”date” />  
       格式化的結果是: 2007-5-27 .  
<fmt:formatDate value=”<%=new java.util.Date() %>” type=”time” />  
格式化的結果是: 9:25:11  
<fmt:formatDate value=”<%=new java.util.Date() %>” type=”both” />  
格式化的結果是: 2007-5-27 9:25:11  
   
   
   
補充知識點:  
   
1. 替換 request.getParameter("test"):  
<c:if test="${param.test!=null}" >  
<c:out value="${param.test}" />  
</c:if>  
   
2. <c:redirect url="a.jsp">  
   
3.<c:redirect url="/max.jsp" context="/ch16">  
<c:param name="name1" value="665"/>  
<c:param name="name3" value=" 斯蒂芬 "/>  
</c:redirect>  
   
4.<c:forTokens items="zhangsan:lisi:as" delims=":" var="name">  
${name}  
</c:forTokens>
1 <c:set>:


(1)<c:set>:設置變量值和對象屬性。語法如下:


       <c:set value="值" var="變量名" scope="變量的作用域" target="對象名" property=" 對象屬性名"></c:set>


每種設置都有兩種方式,總結起來,<c:set>的4種形式,如下所示:


a. 使用標記屬性設置JSP變量


<c:set value="值" var="變量名" scope="作用域"/>


b. 使用標記體設置JSP變量


<c:set var="變量名" scope="作用域">標記內容</c:set>


c. 使用標記屬性設置對象屬性


<c:set value="變量名" target="對象名" property="對象屬性名"/>


d. 使用標記體設置對象屬性


<c:set target="對象名" property="作用域">標記內容</set>


(2)<c:remove>:在指定作用域範圍內刪除變量。語法如下:


<c:remove var="變量名" scope="作用域"/>


2 流程控制:分爲條件標籤和迭代標籤。


條件標籤:<c:if> <c:choose> <c:when> <c:otherwise>


(1)<c:if>:與Java語言中的if語句的使用方法一樣,但不能實現else的功能。


     <c:if>標籤有兩種語法形式,是以有無標記體來區分的。


     無變量:


         <c:if test="測試條件" var="變量名" [scope="作用域"]/>


     有變量:


         <c:if test="測試條件" var="變量名" [scope="作用域"]>


               變量


         </c:if>
<c:if test="${myexception!=null}">
內容
</c:if>


帶標記體的<c:if>


<c:if test="${user.visitCount!=0}">歡迎光臨</c:if>


(2)<c:choose> <c:when> <c:otherwise>


<c:when> <c:otherwise>無法單獨使用,只能作爲<c:choose>的子標籤來使用。這三個標籤組合起來實現Java中的switch語句的功能。語法如下:


    <c:choose>


    <c:when test="${user.class==’guest’}">


        第一條


    </c:when>


    <c:when test="${user.class==’vip’}">


       第二條


    </c:when>   


    <c:otherwise>


       第三條


    </c:otherwise>  


    </c:choose>


迭代標籤:<c:forEach> <c:forTokens>


(1)<c:forEach>:用於遍歷一個對象集合。


    <c:forEach var="變量名" items="集合" varStatus="遍歷狀態名"


               begin="begin" end="end" step="step" >


            變量          


    </c:forEach>


(2)<c:forTokens>:用於遍歷字符串,而且每次遍歷結果返回字符串中的一個單詞。


    <c:forTokens items="字符串" delims="分界符" var="變量名"


          varStatus="遍歷狀態名" begin="begin" end="end" step="sep">


            變量     


    </c:forTokens>


3 URL管理


(1)<c:url>:用於對URL地址進行編碼。


   <c:url value="URL" context="路徑" var="變量名" scope="作用域">


      變量


</c:url>


如下代碼:


<c:url value="http://localhost:8080/el/index.jsp" var="NewURL">


      <c:param name="name" value="zero"/>


      <c:param name="age" value="28"/>


</c:url>


<a href="${NewURL}">點我呀</a>


生成的URL:http://localhost:8080/el/index.jsp?name=zero&age=28


   無變量:主要用於編輯上下文URL。


   <c:url value="URL" context="路徑" var="變量名" scope="作用域"/>


    如下代碼:


   <c:url value="/logon.jsp">登錄</c:url>         


若當前路徑爲el,則輸出爲:/el/logon.jsp   


(2)<c:import>:向當前JSP頁面中引入URL資源(可以是遠程序站點上的資源)。Include指令和include動作不能向JSP頁引入Web程序以外的資源,引入的資源必須位於當前Web程序中。


以String對象引入的語法:


<c:import url="地址" context="上下文路徑" var="變量名"


    scope="作用域" charEncoding="字符集">


        變量使用<c:param>


</c:import>


如下代碼:將外部資源引入到當前JSP頁面中.


<c:import url="http://www.baidu.com" var="myurl" charEncoding="gb2312">


</c:import>


<a href="${myurl }">地址</a>


以Reader對象導入的語法:


<c:import url="地址" context="上下文路徑" varReader="變量名"


    scope="作用域" charEncoding="字符集">


        變量使用其它動作元素


</c:import>


(3)<c:redirect>:用於HTTP重定向。


   無變量: 


<c:redirect url="地址" context="上下文路徑"/>


有變量:


<c:redirect url="地址" context="上下文路徑">
       <c:param/>標籤
</c:redirect>


(4)<c:param>:只能嵌入到<c:url>、、<c:import>、<c:redirect>標籤中作爲子元素來使用。此標籤主要用於設置URL中將要傳入的參數。


無變量:


<c:param name="名稱" value="值"/ >


有變量:


<c:param name="名稱" value="值" >
    變量
</c:param>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章