随笔-86  评论-33  文章-0  trackbacks-0
=========自定义标签学习总结========= 2005年7月28日 09:54:07 Derek

标签的运行方式是:
JSP页面解析中发现自定义标签,则到上面的标签说明中寻找:如
<%@ taglib uri="/mytitle.tld" prefix="dada"%>
此时它会找到该标签的uri ,uri 在web.xml中已经定义了
 <taglib>
    
<taglib-uri>/mytitle.tld</taglib-uri>
    
<taglib-location>/WEB-INF/mytitle.tld</taglib-location>
  
</taglib>
此时它会通过uri在web.xml中查找到该标签的描述文件tld。那么在tld描述文件中又定义了该标签的处理类,具体完成业务的操作,标签处理类继承TagSupport,处理类完成操作后将返回页面。
<name>title</name>
    
<tagclass>com.derek.tags.TitleTag</tagclass>
 
 准备工作 :首先在WEB-INF\lib下添加taglibs-log.jar包
1、创建标签描述文件
     在WEB-INF下新建一个tld文件,该文件描述了此tld文件将由那个处理类完成操作,并且定义了该标签的属性。一个<taglib>中可以有很多个<tag>,由<name>标签名区分。
<?xml version="1.0" encoding="UTF-8"?>
<!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>html</shortname>
<uri>http://jakarta.apache.org/struts/tags-html</uri>

<tag>
     
<name>title</name>
    
<tagclass>com.derek.tags.TitleTag</tagclass>
    
<bodycontent>empty</bodycontent>
    
<attribute>
        
<name>begin</name>
        
<required>true</required>
    
</attribute>
        
<attribute>
        
<name>end</name>
        
<required>true</required>
    
</attribute>
</tag>

</taglib>

2、创建标签处理类
     该类继承  TagSupport,覆盖doEndTag()方法
   
package com.derek.tags;

import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.JspException;
import java.util.Properties;
import java.io.
*
;
import javax.servlet.jsp.JspWriter;

public class
 TitleTag extends TagSupport {
  
private String begin = null
;
  
private String end = null
;
  
public
 TitleTag() {}
  
public String getBegin() {return
 begin;}
  
public void setBegin(String begin) {this.begin =
 begin;}
  
public String getEnd(){return
 end;}
  
public void setEnd(String end){this.end =
 end;}

  
public int
 doEndTag() throws JspException {
    Properties ps 
= (Properties)pageContext.getAttribute("ps",pageContext.APPLICATION_SCOPE);//从上下文中取的message.properties

                  JspWriter jw = pageContext.getOut();
    
if(begin!=null&&begin.length()>0
){
       String header 
=
 ps.getProperty(begin);
       System.
out.println("页眉"+
begin);
       
try
 {
      jw.println(header);
        }
catch
 (IOException ex) {ex.printStackTrace();}
    }
    
if(end!=null&&end.length()>0
){
       String footer 
=
 ps.getProperty(end);
       System.
out.println(" 页脚"+
end);
    
try
 {
      jw.println(footer);
      }
catch
 (IOException ex1) {ex1.printStackTrace();}
    }
    
return
 SKIP_BODY;
  }

  
public void
 release() {
    super.release();
  }
}

3、修改web.xml文件
  在web.xml中<web-app>下添加,将标签的uri与具体标签描述文件绑定
<taglib>
    
<taglib-uri>/mytitle.tld</taglib-uri>
    
<taglib-location>/WEB-INF/mytitle.tld</taglib-location>
</taglib>

4、在页面中使用标签
首先在页面中导入标签
<%@ taglib uri="/mytitle.tld" prefix="dada"%>
该句表示标签前缀为“dada”的标签将调用uri指定的标签,uri可以随便起名字,但一定要可web.xml中定义的uri相对应。
然后就可以在页面中使用了
<dada:title begin="" end="footer"/>

posted on 2005-09-11 09:56 Derek.Guo 阅读(535) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航:
 
MSN:envoydada@hotmail.com QQ:34935442