jsp自定義標記--筆記
可以創(chuàng)建自己的標記
自定義動作是通過自定義標記來調(diào)用
自定義標記提供了可重用、可維護及可移植的內(nèi)容生成解決方案
自定義標記的集合稱為標記庫
自定義標記是顯式設(shè)計的,用于在 JSP 頁面中添加功能,包括頁面內(nèi)容(如HTML)的動態(tài)生成
?
定義自定義標記的步驟:
? 1.為標記開發(fā)標記處理程序和助手類
? 2.? 在標記庫描述文件?Web.xml 中聲明標記
? 1.為標記開發(fā)標記處理程序和助手類
? 2.? 在標記庫描述文件?Web.xml 中聲明標記
?? tagdemojsp-------->webxml-------->mytag.tld---------> 標記處理程序類
?標記處理程序類
執(zhí)行與自定義標記關(guān)聯(lián)的動作的 Java 對象
?標記處理程序類
執(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,以決定是否處理標記的主題部分。
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來驗證標記。
在自定義標記結(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.xml聲明








在JSP中使用標記庫











下面看個例子。。
功能是輸出給定指定數(shù) 的行數(shù)。。
新建一個類繼承 BodyTagSupport? 類
代碼如下:




































































































在WEB-INF 下新建mytag.tld 文件。。














































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