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

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 永久免费毛片在线播放| 无码日韩精品一区二区免费暖暖| 在线观看免费人成视频色9| 91亚洲va在线天线va天堂va国产 | 亚洲国产视频一区| 97在线视频免费播放| 久久久久亚洲AV片无码下载蜜桃| 99视频精品全部免费观看| 亚洲福利一区二区精品秒拍| 四虎最新永久免费视频| 亚洲AV无码专区在线亚 | 青青青国产免费一夜七次郎| 亚洲国产成人久久一区二区三区| 免费看AV毛片一区二区三区| 美女被免费网站在线视频免费| 亚洲国产人成精品| 国产色无码精品视频免费| 亚洲黄色片免费看| 免费无码黄十八禁网站在线观看| 亚洲无码一区二区三区| 国产乱弄免费视频| 精品国产污污免费网站入口| 无码乱人伦一区二区亚洲| 免费H网站在线观看的| 亚洲AV无码AV日韩AV网站| 伊人亚洲综合青草青草久热| 一区二区三区四区免费视频| 亚洲香蕉在线观看| 亚洲国产成人久久综合一区77| a级毛片100部免费观看| 亚洲国产成AV人天堂无码| 国产免费午夜a无码v视频| 先锋影音资源片午夜在线观看视频免费播放 | 亚洲第一网站男人都懂| 可以免费观看的毛片| 亚洲一区在线视频| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲免费人成在线视频观看 | 国产高清在线免费视频| 两个人日本免费完整版在线观看1| 亚洲黄色网址大全|