JSP Taglib如何开发自定义标签

基于jsp2.0的自定义Taglib标签,开发标签库只需如下几个步骤:

1. 引用java包

import javax.servlet.jsp.*;  
import javax.servlet.jsp.tagext.*;  

2. 开发自定义标签处理类

自定义标签类都必须继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,或者TagSupport除此之外,JSP自定义标签类还有如下要求。
1. 如果标签类包含属性,每个属性都有对应的getter和setter方法。
2. 重写doTag()或者doStartTag()或doEndTag()方法方法,这个方法负责生成页面内容。

//java文件
public class UserInfoTag extends TagSupport {  
    private UserInfo user;  
    @Override  
    public int doStartTag() throws JspException {  
        try {  
            JspWriter out = this.pageContext.getOut();  
            if(user == null) {  
                out.println("No UserInfo Found...");  
                return SKIP_BODY;  
            }  
            out.println("<table width='500px' border='1' align='center'>");  
            out.println("<tr>");  
            out.println("<td width='20%'>Username:</td>");  
            out.println("<td>" + user.getUserName() + "</td>");  
            out.println("</tr>");  
            out.println("<tr>");  
            out.println("<td>Age:</td>");  
            out.println("<td>" + user.getAge() + "</td>");  
            out.println("</tr>"); 
            out.println("<tr>");  
            out.println("<td>Email:</td>");  
            out.println("<td>" + user.getEmail() + "</td>");  
            out.println("</tr>");  
            out.println("</table>");  
        } catch(Exception e) {  
            throw new JspException(e.getMessage());  
        }  
        return SKIP_BODY;  
    }  
    @Override  
    public int doEndTag() throws JspException {  
        return EVAL_PAGE;  
    }  
  
    @Override  
    public void release() {  
        super.release();  
        this.user = null;  
    }  
  
    //getter and setters  
    public UserInfo getUser() {  
        return user;  
    }  
  
    public void setUser(UserInfo user) {  
        this.user = user;  
    }  
} 

3. 建立一个*.tld文件,每个*.tld文件对应一个标签库,每个标签库对应多个标签

TLD是Tag Library Definition的缩写,即标签库定义,文件的后缀是tld,每个TLD文件对应一个标签库,一个标签库中可包含多个标签,TLD文件也称为标签库定义文件。标签库定义文件的根元素是taglib,它可以包含多个tag子元素,每个tag子元素都定义一个标签。通常我们可以到Web容器下复制一个标签库定义文件,并在此基础上进行修改即可。

<?xml version="1.0" encoding="UTF-8"?>  
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"  
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">  
<tlib-version>1.0</tlib-version>  
<jsp-version>2.0</jsp-version>  
<short-name>cc</short-name>  
<!-- 定义该标签库的URI 必须添加但可以空-->
<uri>/mytaglib</uri>  
<!-- 定义第一个标签 -->
<tag>  
    <!-- 定义标签名 -->
    <name>showUserInfo</name> 
    <!-- 定义标签处理类 -->
    <tag-class>com.mytags.UserInfoTag</tag-class>  
    <!-- 定义标签体为空 -->
    <body-content>empty</body-content>  
    <attribute>  
        <name>user</name>  
         <required>false</required>  
         <rtexprvalue>true</rtexprvalue>  
    </attribute>  
 </tag>  
</taglib>

4. 配置web.xml

//web.xml
<jsp-config>  
    <taglib>  
        <taglib-uri>/mytaglib</taglib-uri>  
        <taglib-location>/WEB-INF/mytaglib.tld</taglib-location>  
    </taglib>  
</jsp-config>   

5. 在JSP文件中使用自定义标签

<%@ taglib uri="/mytaglib" prefix="cc"%>  

这样自定义标签就建立好了。

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。