1" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

JSP自定義標(biāo)簽開發(fā)入門(2)

系統(tǒng) 2816 0

?

JSP自定義標(biāo)簽開發(fā)入門(2)


JSP自定義標(biāo)簽開發(fā)入門,簡(jiǎn)單標(biāo)簽的開發(fā)我們只要實(shí)現(xiàn)Tag接口即可,為了簡(jiǎn)單起見(jiàn)可以直接繼承實(shí)現(xiàn)了此接口的TagSupport類。

AD:

?

TagSupport類已經(jīng)為我們實(shí)現(xiàn)并擴(kuò)展了一些方法(比如在上述方法中我們可以直接使用pageContext對(duì)象,調(diào)用父標(biāo)簽getParent()等),所以一般情況下我們只需重寫doStartTag(),doEndTag() 即可

TLD文件說(shuō)明:

<!--版本號(hào)-->
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>cc</short-name>
<tag>
<!—指定標(biāo)簽名 -->
<name>showUserInfo</name>
<!—指定標(biāo)簽類文件的全路徑 -->
<tag-class>com.mytags.UserInfoTag</tag-class>
<!--如果不需要標(biāo)簽體則設(shè)置empty,反之設(shè)定jsp -->
<body-content>empty</body-content>
<!—設(shè)定屬性(如果有的話) -->
<attribute>
<!—指定標(biāo)簽名 -->
<name>user</name>
<!—是否是必須,如果非必須沒(méi)設(shè)置則為空 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue><!—是否可在屬性中使用表達(dá)式 -->
</attribute>
</tag>

Web.xml文件說(shuō)明:

<jsp-config>
<taglib>
<!--

標(biāo)簽庫(kù)的uri路徑
即jsp頭文件中聲明<%@ taglib uri="/mytaglib" prefix="cc"%>
的uri
-->
<taglib-uri>/mytaglib</taglib-uri>
<!—tld文件所在的位置-->
<taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
</taglib>
</jsp-config>

目標(biāo)2:自定義一個(gè)類似于Asp.Net中的Reapter控件的標(biāo)簽

效果圖:

?

JSP自定義標(biāo)簽開發(fā)入門(2)

?

在jsp頁(yè)面使用此自定義標(biāo)簽:

        
  1. <!--?創(chuàng)建需要展現(xiàn)javabean(UserInfo)集合的實(shí)例(用于測(cè)試數(shù)據(jù))?--> ?
  2. < % ?
  3. ????List < UserInfo > ? users ?=? new ?ArrayList < UserInfo > ();??? ?
  4. ????users.add(new?UserInfo("Zhangsan",?12,?"Zhangsan@163.com")); ?
  5. ????users.add(new?UserInfo("Lisi",?22,?"Lisi@sina.com")); ?
  6. ????users.add(new?UserInfo("Wangwu",?33,?"Wangwu@qq.com")); ?
  7. ????pageContext.setAttribute("users",?users); ?
  8. % > ?
  9. ? ?
  10. <!--?給標(biāo)簽綁定數(shù)據(jù)源??--> ?
  11. < table ? width = '500px' ? border = '1' ? align = 'center' > ?
  12. ???? < tr > ?
  13. ???????? < td ? width = '20%' > UserName </ td > ?
  14. ???????? < td ? width = '20%' > Age </ td > ?
  15. ???????? < td > Email </ td > ?
  16. ???? </ tr > ?
  17. ???? < cc:repeater ? var = "item" ? items = "${pageScope.users?}" > ?
  18. ???????? < tr > ?
  19. ???????????? < td > ${item.userName?} </ td > ?
  20. ???????????? < td > ${item.age?} </ td > ?
  21. ???????????? < td > ${item.email?} </ td > ?
  22. ???????? </ tr > ?
  23. ???? </ cc:repeater > ?
  24. </ table > ?

開發(fā)步驟:

要完成此控件我們需要實(shí)現(xiàn)一個(gè)迭代接口,即IterationTag,由于TagSupport同樣實(shí)現(xiàn)了此接口,所以我們繼承此類

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

        
  1. public?class?Repeater?extends?TagSupport?{ ?
  2. ????private?Collection?items; ?
  3. ????private?Iterator?it; ?
  4. ????private?String?var; ?
  5. ? ?
  6. ????@Override ?
  7. ????public?int?doStartTag()?throws?JspException?{ ?
  8. ????????if( items ?==?null?||?items.size()?==?0)?return?SKIP_BODY; ?
  9. ???????? it ?=? items .iterator();?? ?
  10. ????????if(it.hasNext())?{ ?
  11. ????????????pageContext.setAttribute(var,?it.next()); ?
  12. ????????} ?
  13. ????????return?EVAL_BODY_INCLUDE; ?
  14. ????} ?
  15. ??? ?
  16. ????@Override ?
  17. ????public?int?doAfterBody()?throws?JspException?{ ?
  18. ????????if(it.hasNext())?{ ?
  19. ????????????pageContext.setAttribute(var,?it.next()); ?
  20. ????????????return?EVAL_BODY_AGAIN; ?
  21. ????????} ?
  22. ????????return?SKIP_BODY; ?
  23. ????} ?
  24. ??? ?
  25. ????@Override ?
  26. ????public?int?doEndTag()?throws?JspException?{ ?
  27. ????????return?EVAL_PAGE; ?
  28. ????} ?
  29. ??? ?
  30. ????public?void?setItems(Collection?items)?{ ?
  31. ???????? this.items ?=?items; ?
  32. ????} ?
  33. ??? ?
  34. ????public?void?setVar(String?var)?{ ?
  35. ???????? this.var ?=?var; ?
  36. ????} ?
  37. }?

2在Web-Inf創(chuàng)建標(biāo)簽庫(kù)描述文件.tdl(Tag Library Description)由于目標(biāo)1種已經(jīng)創(chuàng)建了此文件,我們只需增加此標(biāo)簽的配置即可

        
  1. < tag > ?
  2. ???? < name > repeater </ name > ?
  3. ???? < tag-class > com.mytags.Repeater </ tag-class > ?
  4. ???? < body-content > jsp </ body-content > ?
  5. ???? < attribute > ?
  6. ???????? < name > items </ name > ?
  7. ???????? < required > false </ required > ?
  8. ???????? < rtexprvalue > true </ rtexprvalue > ?
  9. ???? </ attribute > ?
  10. ???? < attribute > ?
  11. ???????? < name > var </ name > ?
  12. ???????? < required > true </ required > ?
  13. ???????? < rtexprvalue > true </ rtexprvalue > ?
  14. ???? </ attribute > ?
  15. ? </ tag > ?
  16. ??

3 配置web.xml (目標(biāo)1中已完成,無(wú)需修改)

?

JSP自定義標(biāo)簽開發(fā)入門(2)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲综合色播 | 999久久66久6只有精品 | 狠狠狠狠狠狠 | 欧美日韩高清一区二区三区 | 欧美在线视频一区二区三区 | 欧美一级毛片图 | 亚洲成人91| 久久精品国产欧美 | 欧洲成人免费高清视频 | 亚洲视频大全 | 亚洲综合免费视频 | 亚洲另类欧美日韩 | 亚洲国产婷婷香蕉久久久久久 | 久久精品免费观看 | 国产精品第1页 | 免费在线观看的毛片 | 一本岛高清v不卡免费一三区 | 欧美精品亚洲人成在线观看 | 国产成人精品亚洲日本在线观看 | 99re6在线视频免费精品 | 久久影视免费体验区午夜啪啪 | 精品日韩在线视频一区二区三区 | 久久国产精品系列 | 午夜精品久久久久久久90蜜桃 | 国产精品久久久久久福利69堂 | 嘿咻视频在线观看 | 免费激情网址 | 伊人网狠狠干 | 亚洲日本aⅴ片在线观看香蕉 | 国产欧美乱码在线看 | 欧美一级在线看 | 久久九色综合九色99伊人 | 亚洲成人在线播放视频 | 亚洲国产影院 | 波多野结衣视频一区二区 | 亚洲精品456| 九九影视理论片在线播放 | 久久综合精品视频 | 久久草在线播放 | 在线成人免费视频 | 日韩视频亚洲 |