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

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

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

    blogjava's web log

    blogjava's web log
    ...

    jsp自定義標記--筆記


    可以創建自己的標記
    自定義動作是通過自定義標記來調用
    自定義標記提供了可重用、可維護及可移植的內容生成解決方案
    自定義標記的集合稱為標記庫

    自定義標記是顯式設計的,用于在 JSP 頁面中添加功能,包括頁面內容(如HTML)的動態生成

    ?
    定義自定義標記的步驟:
    ? 1.為標記開發標記處理程序和助手類
    ? 2.? 在標記庫描述文件?Web.xml 中聲明標記
    ?? tagdemojsp-------->webxml-------->mytag.tld---------> 標記處理程序類
    ?標記處理程序類
    執行與自定義標記關聯的動作的 Java 對象
    必須實現javax.servlet.jsp.tagext包的Tag或Body Tag接口
    支持以下方法:
    setPageContext(),??? setParent()
    doStartTag(), doEndTag()? and release()


    doStartTag()
    自定義標記開始時調用
    返回在標記接口中定義的 int 常量的EVAL_BODY_INCLUDE或 SKIP_BODY,以決定是否處理標記的主題部分。
    doEndTag()
    在自定義標記結束時調用
    返回 EVAL_PAGE 或 SKIP_PAGE。如果它返回 EVAL_PAGE或SKIP_PAGE,以決定是否處理頁面的其余部分。

    標記庫描述文件

    標記庫描述文件 (TLD) 是描述標記庫的 XML 文檔。JSP 容器使用TLD來驗證標記。
    TLD 包含關于作為整體的庫以及包含在庫中的每個標記的信息。
    TLD還包含各種標記元素,每種元素均作了詳細解釋。

    標記元素的信息
    <tag>
    ??
    <name>Greeting</name>
    <tagclass>examples.servlets.Greeting</tagclass>
    ??
    <bodycontent>empty</bodycontent>
    ??
    <info>Tag?with?Parameter</info>
    </tag>

    標記屬性的信息
    <attribute>
    ????
    <name>num1</name>
    ????
    <required>true</required>
    ????
    <rtexprvalue>false</rtexprvalue>
    </attribute>

    標記庫描述文件

    <?xml?version="1.0"?encoding="ISO-8859-1"??>
    <!DOCTYPE?taglib?PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?JSP?Tag?Library?1.1//EN"?"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    <taglib>
    ??
    <tlibversion>1.0</tlibversion>
    ??
    <jspversion>1.1</jspversion>
    ??
    <shortname>mytag</shortname>
    ??
    <uri></uri>
    </taglib>

    web.xml聲明
    <?xml?version="1.0"?encoding="UTF-8"?>
    <!DOCTYPE?web-app?PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"?"http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
    ??
    <taglib>
    ???
    <taglib-uri>mycusttag</taglib-uri>
    ???
    <taglib-location>/WEB-INF/mytag.tld</taglib-location>
    ??
    </taglib>
    </web-app>


    在JSP中使用標記庫
    <html>
    ??
    <title>?Custom?JSP?Tag?example?</title>
    ????
    <%@?taglib?uri="mycusttag"?prefix="mytag"?%>
    ????Here?comes?the?tag:
    <p>
    ??
    <body?bgcolor=wheat>
    ????
    <i><mytag:Greeting/></i>
    ????
    <p>There?went?the?tag.</p>
    ??
    </body>
    </html>

    下面看個例子。。
    功能是輸出給定指定數 的行數。。

    新建一個類繼承 BodyTagSupport? 類
    代碼如下:
    package?tagtest.mytag;

    import?javax.servlet.jsp.tagext.BodyTagSupport;
    import?javax.servlet.jsp.JspTagException;
    import?javax.servlet.jsp.tagext.BodyContent;

    public?class?LoopTag?extends?BodyTagSupport?{

    ????
    private?int?count;
    ????
    public?LoopTag()?{
    ????}


    ????
    public?void?setCount(int?count)?{
    ????????
    this.count?=?count;
    ????}

    ????
    public?int?doStartTag()?throws?JspTagException
    ?????
    {
    ?????????System.out.println(
    "doStartTag");
    ?????????
    if(count>0)
    ?????????
    {
    ?????????????
    return?EVAL_BODY_TAG;
    ?????????}

    ?????????
    else
    ?????????
    {
    ??????????????
    return?SKIP_BODY;
    ?????????}

    ?????}

    ?????
    /**
    ????*覆蓋doAfterBody方法
    ????
    */

    ???
    public?int?doAfterBody()?throws?JspTagException
    ???
    {
    ???????System.out.println(
    "doAfterBody"+count);
    ???????
    if(count>1)
    ???????
    {
    ???????????????count
    --;
    ???????????????
    return?EVAL_BODY_TAG;
    ????????}

    ????????
    else
    ????????
    {
    ???????????
    return?SKIP_BODY;
    ????????}

    ???}

    ???
    public?int?doEndTag()?throws?JspTagException
    ???
    {
    ?????System.out.println(
    "doEndTag");
    ???????
    try
    ???????
    {
    ????????????
    if(bodyContent?!=?null)
    ????????????
    {
    ????????????????????bodyContent.writeOut(bodyContent.getEnclosingWriter());
    ????????????}

    ???????}

    ???????
    catch(java.io.IOException?e)
    ???????
    {
    ???????????????
    throw?new?JspTagException("IO?Error:?"?+?e.getMessage());
    ???????}

    ???????
    return?EVAL_PAGE;
    ???}


    ???
    public?void?doInitBody()?throws?JspTagException{
    ??????System.out.println(
    "doInitBody");
    ?????}

    ?????
    public?void?setBodyContent(BodyContent?bodyContent)
    ?????
    {
    ??????????System.out.println(
    "setBodyContent");
    ??????????
    this.bodyContent=bodyContent;
    ?????}

    }


    在WEB-INF 下新建mytag.tld 文件。。
    <?xml?version="1.0"?encoding="ISO-8859-1"??>
    <!DOCTYPE?taglib?PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?JSP?Tag?Library?1.1//EN"?"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">


    <taglib>
    <tlibversion>1.0</tlibversion>
    <jspversion>2.0</jspversion>
    <shortname>mytag</shortname>

    <tag>
    <name>Loop</name>
    <tagclass>tagtest.mytag.LoopTag</tagclass>
    <attribute>
    <name>count</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
    </attribute>
    </tag>
    </taglib>
    web.xml 文件加上一句
    ??<taglib>
    ????
    <taglib-uri>/WEB-INF/mytag.tld</taglib-uri>
    ????
    <taglib-location>/WEB-INF/mytag.tld</taglib-location>
    ??
    </taglib>
    新建JSP頁。。
    <%@?page?contentType="text/html;?charset=GBK"?%>
    <!--這里加上這句-->
    <%@?taglib?uri="/WEB-INF/mytag.tld"?prefix="mytag"?%>

    <html>
    <head>
    <title>
    firstTag
    </title>
    </head>
    <body?bgcolor="#ffffff">
    <!--count?要循環的次數-->
    <mytag:Loop?count="10">
    wujunjunjunjun
    <br>
    </mytag:Loop>
    </body>
    </html>
    上面寫的10? 運行后頁面應該打印10行 wujunjunjunjun了。。

    posted on 2006-04-05 22:56 record java and net 閱讀(533) 評論(1)  編輯  收藏 所屬分類: Jsp&&Web

    評論

    # re: jsp自定義標記--筆記 2006-09-16 19:23 ert

    retert  回復  更多評論   

    導航

    常用鏈接

    留言簿(44)

    新聞檔案

    2.動態語言

    3.工具箱

    9.文檔教程

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 成在线人免费无码高潮喷水| 三上悠亚在线观看免费| 成人亚洲网站www在线观看| 青青操免费在线视频| 亚洲一卡2卡4卡5卡6卡在线99 | 久久精品夜色国产亚洲av| 亚洲精品动漫免费二区| 四虎一区二区成人免费影院网址| 在线电影你懂的亚洲| 亚洲а∨天堂久久精品| 精品国产免费人成电影在线观看| 激情吃奶吻胸免费视频xxxx| 亚洲天天做日日做天天欢毛片| 日本免费一区尤物| 最近的中文字幕大全免费8| 美女隐私免费视频看| 亚洲性无码av在线| 亚洲一区二区三区影院| 午夜一区二区免费视频| 3d成人免费动漫在线观看| eeuss影院免费92242部| 亚洲欧美成人av在线观看| 亚洲一区二区电影| 亚洲五月综合缴情在线观看| 国产高清在线精品免费软件| 99久久久国产精品免费无卡顿| 最新亚洲成av人免费看| 亚洲avav天堂av在线网毛片| 亚洲另类春色国产精品| 久久久久亚洲Av片无码v| 亚洲裸男gv网站| 国产高清视频在线免费观看| 99在线精品视频观看免费| 污视频在线观看免费| 免费在线观影网站| 一级视频在线免费观看| 成人婷婷网色偷偷亚洲男人的天堂 | 激情无码亚洲一区二区三区| 亚洲区精品久久一区二区三区| 亚洲AV一宅男色影视| 国产亚洲一区区二区在线|