<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.文檔教程

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 日韩免费视频播放| 一级毛片免费在线观看网站| 中文字幕无码日韩专区免费 | 成人免费看片又大又黄| 亚洲第一永久在线观看| 国产成人精品免费视| 亚洲AV无码国产丝袜在线观看| 国产成人无码精品久久久免费| 久久激情亚洲精品无码?V| av电影在线免费看| 亚洲人成无码网站| 日韩亚洲不卡在线视频中文字幕在线观看| 春暖花开亚洲性无区一区二区| 日韩免费视频播播| 精品国产污污免费网站入口在线| 国产成A人亚洲精V品无码性色| 性色午夜视频免费男人的天堂| 亚洲国产高清美女在线观看| 免费无码精品黄AV电影| 国内成人精品亚洲日本语音 | 免费A级毛片无码视频| 亚洲一区二区三区在线播放| 亚洲精品国产精品国自产网站| 亚欧日韩毛片在线看免费网站| 亚洲图片中文字幕| 欧洲美熟女乱又伦免费视频| 丰满妇女做a级毛片免费观看| 婷婷精品国产亚洲AV麻豆不片 | 亚洲av成人无码网站…| 久久精品国产免费观看三人同眠| 久久国产亚洲精品| 老司机亚洲精品影视www| 无码A级毛片免费视频内谢| 亚洲另类自拍丝袜第五页| 亚洲精品456播放| 最近免费中文字幕mv在线电影| 亚洲av无码成人影院一区| 亚洲中文字幕无码一区二区三区| 久久精品国产免费观看| a毛片成人免费全部播放| 亚洲成aⅴ人片在线观|