<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 37, comments - 8, trackbacks - 0, articles - 0

    jsp程序設計:jstl之JSTL標簽庫(下)

    Posted on 2008-10-26 23:37 夢與橋 閱讀(1681) 評論(0)  編輯  收藏 所屬分類: jsp程序設計
    1、簡單標簽
        實現自定義標簽的三個步驟:
        1)編寫標簽處理程序(java類)。
        2)編寫標簽庫描述符(提供有關標簽和庫文件的元信息的XML文件)。
        3)JSP實現(包含自定義標簽的JSP文件)。
    2、開發簡單的自定義標簽
        1)標簽處理程序wz.java的源代碼如下:
    package www.zzz;
    import javax.servlet.jsp.tagext.*;
    import java.io.*;
    import java.util.*;
    import javax.servlet.jsp.*;
    public class wz extends SimpleTagSupport{
        
    private String name;
        
    private int age;
        
    public void setName(String name) {
            
    this.name = name;
        }

        
    public void setAge(int age) {
            
    this.age = age;
        }

        
    public void doTag() throws JspException, IOException {
            JspWriter out 
    = this.getJspContext().getOut();
            out.println(
    "<h3>"+name+"的個人信息:</h3><br>");
            getJspContext().setAttribute(
    "name","姓名:"+name+"<br>");
            getJspContext().setAttribute(
    "age""年齡:"+age+"<br>");
            getJspBody().invoke(
    null);
        }

    }
        2)標簽描述文件wz.tld的內容如下:
    <?xml version="1.0" encoding="UTF-8" ?>
    <taglib xmlns
    ="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation
    ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version
    ="2.0">
        <description>
            A tag library exercising SimpleTag handlers.
        </description>
        <tlib-version>
    1.0</tlib-version>
        <short-name>SimpleTagLibrary</short-name>
        <uri>/SimpleTagLibrary</uri>
        <tag>
            <description>Outputs Hello
    , World</description>
            <name>wz</name>
            <tag-class>www.zzz.wz</tag-class>
            <body-content>scriptless</body-content>
            <attribute>
                <name>name</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
            </attribute>    
            <attribute>
                <name>age</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
            </attribute>    
        </tag>
    </taglib>
        3)引入標簽的JSP頁面的源碼:
    <%@ page contentType="text/html; charset=GBK"%>
    <%@ taglib uri="/WEB-INF/tld/wz.tld" prefix="mytag"%>
    <html>
        
    <body>
            
    <mytag:wz name="張三" age="15">
                ${name}
                ${age}
            
    </mytag:wz>        
        
    </body>
    </html> 
    注:編譯后的類文件放到WEB-INF/classes目錄下,描述文件tld放到WEB-INF/tld目錄下(似乎哪個目錄下都行,也可直接放到WEB-INF目錄下,因為有uri引用吧),tag文件保存到web應用的WEB-INF/tags目錄下。
        4)對wz.tld文件的解釋:
        tlib-version:是必須的元素,指定標記庫函數的版本號。
        short-name:為標記庫指定一個縮略名稱,用它可以作為標記庫的默認名字空間。
        info:用來描述標記的文檔信息,默認值為空。
        uri:用來指定連接到標記的附加源文件,即tld的公共可用副本。
        tag:是標記描述文件中最重要的一個元素,有6個子元素:name、tagclass、teiclass、bodycontent、info、attribute。
                name:用戶指定的標記名稱。
                tag-class:指定標記處理類,寫全名,即帶包的類。
                bodycontent:說明標記體的類型,分為4種:empty、jsp、scriptless、tagdependent。
                            empty:表示沒有標記體。 
                            jsp:表示標記體可以為jsp代碼。
                            scriptless:表示標記中不能用jsp腳本。
                            tagdependent:表示標簽中的內容交給標記處理程序去進行處理。
                info:記錄標記的描述信息。
                attribute:用來指定零個或者多個標記屬性,有三個子元素:name、required、rtextprvalue。
                            name:必須設定,用來表示大小寫敏感屬性名稱。
                            required:必須設定,標示屬性是否一定要存在,默認為flase,即在標記處理程序中不會自動調用屬性
                                                        的setAttribue方法。
                            rtextprvalue:用來說明屬性是否可以是動態生成的,但設定為true時,屬性即可以是一個常量值,也可
                                                        以由表達式生成。
     3、標簽文件,是JSP2.0新增的功能,目的是讓JSP網頁開發人員能夠直接使用JSP語法來制作標簽,而無須了解java語言。其擴展名都是.tag或.tagx。假如Tag File包含其他完整的或片段的Tag File,JSP2.0規范建議擴展名為.tagf。
        1)Tag File的7個隱式對象:request、response、out、jspContext、session、application、config。
        2)Tag File的指令:
                    tag        如同JSP網頁的page指令。
                    taglib    如同JSP網頁的taglib指令。
                    include  如同JSP網頁的include指令。
                    attribute 用來設定自定義標簽的屬性。
                    variable 用來設TagFile的變量,此變量可回傳至JSP網頁。
        3)新增的幾個動作:
                    <jsp:attribute>標簽:用來指定自定義標簽屬性塊,必要時可以作為代碼段輸出。
                    <jsp:doBody>標簽:告訴容器去處理body,并且將處理結果添加到response中,可以有選擇地使用"var"屬性,捕獲處理的結果,并在下一步進行處理。
                    <jsp:invoke>標簽:對作為屬性傳遞的特定參數進行操作。
        4)開發并使用一個日期標簽:datetag.tag與datetag.jsp
        datetag.tag的代碼如下:
    <%@tag pageEncoding="GBK"%>
    <%@tag import="java.util.*,java.text.*"%>
    <%@variable name-given="fulldate" scope="AT_BEGIN"%>
    <%
      DateFormat fullformate 
    = DateFormat.getDateInstance(DateFormat.FULL);
      
    Date now = new Date();
      jspContext.setAttribute(
    "fulldate", fullformate.format(now));
    %>
    <jsp:doBody/>  
        datetag.jsp的代碼如下:
    <%@ page contentType="text/html; charset=GBK"%>
    <%@ taglib prefix="mytag" tagdir="/WEB-INF/tags/"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

    <html>
        
    <body>
            
    <h1>
                日期tag標簽文件演示
            
    </h1>
            
    <mytag:datetag>
                  標簽體的輸出:${fulldate}
    <br>
            
    </mytag:datetag>
            頁面的輸出:${fulldate}
        
    </body>
    </html>
        5)開發并使用一個求和標簽:sumtag.tag與sumtag.jsp
        sumtag.tag的代碼如下:
    <%@tag pageEncoding="GBK"%>
    <%@attribute name="items" required="true" rtexprvalue="true"%>
    <%@attribute name="great" fragment="true"%>
    <%@attribute name="less" fragment="true"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@variable name-given="sum" variable-class="java.lang.Object"%>
    <c:if test="${not empty items}">
        
    <c:forEach items="${items}" var="item">
            
    <c:set var="sum" value="${item+sum}" />
        
    </c:forEach>

        
    <c:if test="${sum>=1000}">
            
    <jsp:invoke fragment="great" />
        
    </c:if>

        
    <c:if test="${sum<1000}">
            
    <jsp:invoke fragment="less" />
        
    </c:if>
    </c:if>
        sumtag.jsp的代碼如下:
    <%@ page contentType="text/html; charset=GBK"%>
    <%@ taglib prefix="mytag" tagdir="/WEB-INF/tags/"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
        
    <body>
            
    <mytag:sumtag items="111,222,333">
                
    <jsp:attribute name="great">
                    
    <font color="red"> SUM: ${sum}</font>
                
    </jsp:attribute>
                
    <jsp:attribute name="less">
                    
    <font color="blue"> SUM: ${sum}</font>
                
    </jsp:attribute>
            
    </mytag:sumtag>
        
    </body>
    </html>
    注:tag文件保存到web應用的WEB-INF/tags目錄下。
    4、JSP標記與JavaBean有何區別?
        答:JavaBean存在先天的不足,它只是可復用組件,獨立于運行環境而包裝了一些數據和業務邏輯功能,無法獲得運行環境信息,無法與JSP頁面進行更加深層次的交互。自定義標記機制解決了它的這種的缺陷,標記庫的處理類不但具有JavaBean的功能,而且可以把JSP的環境住處傳到類中間,不但能得到JSP傳遞過來的屬性,還能與JSP共用頁面環境,JSP頁面中可以通過session、page與標記處理程序進行數據通信,這一點是javaBean所不能實現的。
    主站蜘蛛池模板: 亚洲午夜福利AV一区二区无码| 亚洲视频在线观看免费| 日韩免费观看视频| 久久久久久亚洲精品影院| 成年在线观看免费人视频草莓| 亚洲AV无码乱码麻豆精品国产| 大学生美女毛片免费视频| 亚洲第一街区偷拍街拍| 四虎亚洲国产成人久久精品| 日韩在线视频播放免费视频完整版 | 亚洲精品视频在线观看免费| 亚洲最大的视频网站| 高清国语自产拍免费视频国产 | 久久亚洲AV成人出白浆无码国产| 永久免费av无码网站韩国毛片| 尤物视频在线免费观看| 亚洲欧洲国产视频| 亚洲国产成人精品91久久久| 182tv免费观看在线视频| 日韩精品免费一线在线观看 | 思思久久99热免费精品6| 亚洲成a人片在线观看中文app| 亚洲AV无码专区日韩| 67194熟妇在线永久免费观看 | 国产精品1024永久免费视频| j8又粗又长又硬又爽免费视频| 亚洲中文无码a∨在线观看| 亚洲午夜精品久久久久久浪潮| 日本免费无遮挡吸乳视频电影| 国产在线播放线91免费| 亚洲精品国产av成拍色拍| 久久精品国产精品亚洲蜜月| 免费人成在线观看视频播放| 4虎永免费最新永久免费地址| a级片在线免费看| 老司机福利在线免费观看| 亚洲精品天堂在线观看| 亚洲第一区香蕉_国产a| 国产gv天堂亚洲国产gv刚刚碰| 日韩中文无码有码免费视频| 又黄又爽又成人免费视频|