JSP自定义标签开发入门(2)

系统 1868 0

 

JSP自定义标签开发入门(2)


JSP自定义标签开发入门,简单标签的开发我们只要实现Tag接口即可,为了简单起见可以直接继承实现了此接口的TagSupport类。

AD:

 

TagSupport类已经为我们实现并扩展了一些方法(比如在上述方法中我们可以直接使用pageContext对象,调用父标签getParent()等),所以一般情况下我们只需重写doStartTag(),doEndTag() 即可

TLD文件说明:

<!--版本号-->
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>cc</short-name>
<tag>
<!—指定标签名 -->
<name>showUserInfo</name>
<!—指定标签类文件的全路径 -->
<tag-class>com.mytags.UserInfoTag</tag-class>
<!--如果不需要标签体则设置empty,反之设定jsp -->
<body-content>empty</body-content>
<!—设定属性(如果有的话) -->
<attribute>
<!—指定标签名 -->
<name>user</name>
<!—是否是必须,如果非必须没设置则为空 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue><!—是否可在属性中使用表达式 -->
</attribute>
</tag>

Web.xml文件说明:

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

标签库的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>

目标2:自定义一个类似于Asp.Net中的Reapter控件的标签

效果图:

 

JSP自定义标签开发入门(2)

 

在jsp页面使用此自定义标签:

        
  1. <!-- 创建需要展现javabean(UserInfo)集合的实例(用于测试数据) -->  
  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. <!-- 给标签绑定数据源  -->  
  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 >  

开发步骤:

要完成此控件我们需要实现一个迭代接口,即IterationTag,由于TagSupport同样实现了此接口,所以我们继承此类

1 创建自定义标签类

        
  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.     }  

2在Web-Inf创建标签库描述文件.tdl(Tag Library Description)由于目标1种已经创建了此文件,我们只需增加此标签的配置即可

        
  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 (目标1中已完成,无需修改)

 

JSP自定义标签开发入门(2)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论