blogjava's web log

          blogjava's web log
          ...

          jsp自定義標記--筆記


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

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

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


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

          標記庫描述文件

          標記庫描述文件 (TLD) 是描述標記庫的 XML 文檔。JSP 容器使用TLD來驗證標記。
          TLD 包含關(guān)于作為整體的庫以及包含在庫中的每個標記的信息。
          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>

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

          新建一個類繼承 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?要循環(huán)的次數(shù)-->
          <mytag:Loop?count="10">
          wujunjunjunjun
          <br>
          </mytag:Loop>
          </body>
          </html>
          上面寫的10? 運行后頁面應(yīng)該打印10行 wujunjunjunjun了。。

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

          評論

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

          retert  回復(fù)  更多評論   

          導(dǎo)航

          常用鏈接

          留言簿(44)

          新聞檔案

          2.動態(tài)語言

          3.工具箱

          9.文檔教程

          友情鏈接

          搜索

          最新評論

          主站蜘蛛池模板: 乐山市| 连南| 齐河县| 石台县| 肥东县| 柘城县| 和田县| 张家口市| 广昌县| 永济市| 道真| 天柱县| 大连市| 平山县| 旬邑县| 吉林市| 綦江县| 镇平县| 屏南县| 酒泉市| 丰县| 图木舒克市| 喀什市| 枣阳市| 麟游县| 马边| 金华市| 仁化县| 申扎县| 共和县| 拉孜县| 洛南县| 阜新| 贵南县| 伊宁市| 彭阳县| 安塞县| 东兰县| 星子县| 门头沟区| 亚东县|