国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
創(chuàng)建JSP自定義標(biāo)簽

創(chuàng)建JSP自定義標(biāo)簽

在JSP編程中,Struts一般用來處理form和業(yè)務(wù)邏輯,Struts中使用了很多自定義標(biāo)簽,如html、bean等,但很多時候我們還是需要使用 "<% java code %>" 這樣的語句來操作一些輸出。為了減少這種代碼,可以創(chuàng)建自定義標(biāo)簽。

一個tag就是一個普通的java類,它唯一特別之處是它必須繼承TagSupport或者BodyTagSupport類。這兩個類提供了一些方法,負(fù)責(zé)jsp頁面和你編寫的類之間的交互,例如輸入,輸出。而這兩個類是由jsp容器提供的,無須開發(fā)人員自己實(shí)現(xiàn)。換句話說,你只需把實(shí)現(xiàn)了業(yè)務(wù)邏輯的類繼承TagSupport或者BodyTagSupport,再做一些特別的工作,你的類就是一個Tag。并且它自己負(fù)責(zé)和jsp頁面的交互,不用你多操心。

下面介紹如何創(chuàng)建一個自定義標(biāo)簽。
一.編寫java類繼承TagSupport或TagSupport
1) 提供屬性的set方法,
此后這個屬性就可以在jsp頁面設(shè)置。以jstl標(biāo)簽為例 <c:out value=""/>,這個value就是jsp數(shù)據(jù)到tag之間的入口。所以tag里面必須有一個setValue方法,具體的屬性可以不叫value。例如setValue(String data){this.data = data;}
這個“value”的名稱是在tld里定義的。取什么名字都可以,只需tag里提供相應(yīng)的set方法即可。
2)處理 doStartTag 或 doEndTag
這兩個方法是 TagSupport提供的。 還是以<c:out value=""/>為例,當(dāng)jsp解析這個標(biāo)簽的時候,在“<”處觸發(fā) doStartTag 事件,在“>”時觸發(fā) doEndTag 事件。通常在 doStartTag 里進(jìn)行邏輯操作,在 doEndTag 里控制輸出。
下面是一個簡單的例子
Java代碼
  1. package com.test.tag;   
  2. import java.io.IOException;   
  3. import javax.servlet.jsp.JspTagException;   
  4. import javax.servlet.jsp.tagext.BodyContent;   
  5. import javax.servlet.jsp.tagext.BodyTagSupport;   
  6. /**  
  7. * PermissionBodyTag 根據(jù)是否有權(quán)限顯示body內(nèi)容  
  8.  */  
  9. public class PermissionBodyTag extends BodyTagSupport {   
  10.     boolean permission;   
  11.     public boolean isPermission() {   
  12.         return permission;   
  13.     }   
  14.     public void setPermission(boolean permission) {   
  15.         this.permission = permission;   
  16.     }   
  17.     public int doStartTag() throws JspTagException {   
  18.         if (permission) {   
  19.             return EVAL_BODY_INCLUDE;   
  20.         } else {   
  21.             return SKIP_BODY;   
  22.         }   
  23.     }   
  24.     public int doEndTag() throws JspTagException {   
  25.         System.out.println("doEndTag");   
  26.         try {   
  27.             if (bodyContent != null) {   
  28.                 bodyContent.writeOut(bodyContent.getEnclosingWriter());   
  29.             }else{   
  30.             }   
  31.         } catch (IOException e) {   
  32.             throw new JspTagException("IO ERROR:" + e.getMessage());   
  33.         }   
  34.         return EVAL_PAGE;   
  35.     }   
  36.     public void doInitBody() throws JspTagException {   
  37.     }   
  38.     public void setBodyContent(BodyContent bodyContent) {   
  39.         this.bodyContent = bodyContent;   
  40.     }   
  41. }  


 通常你會發(fā)現(xiàn)自己絕大多數(shù)活動都集中在 doStartTag 或 doEndTag 方法里。確實(shí)如此,熟悉一些接口和類之后,寫taglib很容易。正如《jsp設(shè)計(jì)》的作者所言:里面的邏輯稍微有點(diǎn)復(fù)雜,但畢竟沒有火箭上天那么難。

二.編寫tld文件
標(biāo)簽文件其實(shí)只是一個XML格式的說明文件,內(nèi)容也很簡單。
創(chuàng)建tagTest-html.tld文件在這個標(biāo)簽文件中,我們將我們創(chuàng)建的標(biāo)簽取名 tagTest,并聲明了類型和參數(shù)(permission)。將該文件保存在 /WEB-INF 下面。
Java代碼
  1.  <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">   
  3. <taglib>   
  4.     <tlibversion>1.2</tlibversion>   
  5.     <jspversion>1.1</jspversion>   
  6.     <shortname>tagTest</shortname>   
  7.     <uri>/taiji</uri>   
  8.     <tag>   
  9.         <name>permission</name>   
  10.         <tagclass>com.test.tag.PermissionBodyTag</tagclass>   
  11.         <bodycontent>JSP</bodycontent>   
  12.         <attribute>   
  13.             <name>permission</name>   
  14.             <required>true</required>   
  15.             <rtexprvalue>true</rtexprvalue>   
  16.         </attribute>   
  17.     </tag>   
  18. </taglib>   
  19.    


三.加到web.xml中

當(dāng)然,我們還需要將我們自定義的標(biāo)簽添加到 web.xml 中,否則還是無法使用。
Java代碼
  1. <taglib>   
  2.     <taglib-uri>/tagTest </taglib-uri>   
  3.     <taglib-location>/WEB-INF/tagTest-html.tld</taglib-location>   
  4.   </taglib>  


四.在jsp頁面導(dǎo)入tld
Java代碼
  1. <%@ taglib uri="/tagTest " prefix="tagTest "%>  


這樣,你的jsp頁面就可以使用自己的tag了。用這個標(biāo)簽就可以根據(jù)傳人的boolean值來決定標(biāo)簽包的jsp內(nèi)容是否輸出
Java代碼
  1. <tagTest:permission permission="<% java code%>">   
  2. //需有權(quán)限輸出,用戶才能看到的內(nèi)容   
  3. </tagTest:permission>  


優(yōu)點(diǎn)
1. 修改后的JSP文件不再或盡量少包含java代碼,. html代碼變得非常干凈,頁面設(shè)計(jì)人員修改頁面文件時,不用擔(dān)心誤刪除程序代碼了。
2. 程序開發(fā)人員使用簡單的空白頁就可以進(jìn)行開發(fā),待頁面設(shè)計(jì)人員提交目標(biāo)頁后,只需簡單的編輯即可完成替換

最終使頁面和代碼盡量分離。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
java自定義標(biāo)簽庫的開發(fā)
帶有body的自定義tag的開發(fā)過程
使用AJAX的Struts驗(yàn)證框架(4)
(轉(zhuǎn)載)TLD的屬性
SSM框架——實(shí)現(xiàn)分頁和搜索分頁
struts2 標(biāo)簽的使用之一 s:if
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服