自定义jsp标签报错MyHrTag cannot be resolved to a type

Acre 发布于 2015/12/16 20:50
阅读 571
收藏 0

//java处理类

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;
 
/**
 * 自定义自结束标签,不含标签体。
 *
 * 1、在自定义的类中,重写了父类TagSupport 的两个方法:doStartTag()、doEndTag(),在容器遇到标记开始时会运行doStartTag(),遇到标记结束时运行doEndTag()方法;
 * 2、doStartTag()方法的返回值:通常可以取两个值:
 *      EVAL_BODY_INCLUDE——包含标记体,本例中要编写自结束标记所以不使用该值;
 *      SKIP_BODY——跳过标记体,即不处理标记体,开发自结束标记应该使用该值。
 * 3、doEndTag()方法的返回值:通常可以取两个值:
 *      SKIP_PAGE——返回这个值,则终止页面执行;
 *      EVAL_PAGE——返回该值则处理完当前标记后,JSP 页面中止运行。
 */
 
public class MyHrTag extends TagSupport{
 
    /**
     *
     */
    private static final long serialVersionUID = 1L;
 
    /*
     * 在WEB 容器遇到标签开始时,该方法会运行。
     * 该方法可以自行定义,也可以不定义。不定义该方法则遇到开始标签什么都不做
     * */
    public int doStartTag() throws JspException {
       try {
           //得到网络输出流,pageContext 是从父类继承过来的成员
           JspWriter out = pageContext.getOut();
           //向网页输出内容
           out.println("<h4>开始执行doStartTag()......</h4>");
           //输出5 条水平线;
           for(int i=1; i<=5; i++){
              out.println("<hr>");
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
       //return EVAL_BODY_INCLUDE; //处理标记体
       return Tag.SKIP_BODY; //跳过标记体;
    }
   
    /*
     * 在WEB 容器遇到标签结束时,该方法会运行。
     * 该方法可以自行定义,也可以不定义。不定义该方法则遇到结束标签什么都不做
     * */
    public int doEndTag() throws JspException {
       try {
           JspWriter out=pageContext.getOut();
           out.println("<h3>开始执行doEndTag().....</h3>.");
       } catch (Exception e) {
           e.printStackTrace();
       }
       //return Tag.SKIP_PAGE; //返回这个值,则终止页面执行;
       return EVAL_PAGE;
    }
}

.tld文件

<?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">    
<!--
解释:
在tld 文件中,映射了标记名和处理程序类;
<tallib>元素,代表开始一个标记库的描述
<tligversion>元素,代表标记库的版本
<jspversion>元素,代表标记所支持的JSP 的版本
<shortname>为标记库起别名,相当于注释,无实际用途
<tag>元素,代表开始描述一个标记,其下子元素如下:
    <name>——为标记处理类起的标记名
    <tagclass>——指定标记处理类的全名(即带包的名字)
    <bodycontent>——标记体的类型,该示例中不需要标记体,所有设置为EMPTY,该值的其他取值在后续内容中讲解
 -->
<taglib>
    <tlibversion>1.0</tlibversion>
    <jspversion>1.1</jspversion>
    <shortname>myhr</shortname> <!-- 标签以<myhr:XXX />形式 -->
    <tag>
       <name>MyHr</name> <!-- 该标签为<myhr:MyHr /> -->
       <tagclass>MyHrTag</tagclass>
       <bodycontent>EMPTY</bodycontent>
    </tag>
</taglib>
inde.jsp文件:

<%@ page contentType="text/html" pageEncoding="utf-8" language="java"%>
<%@ page import="java.util.*"%>
<%@ taglib uri="/WEB-INF/myhr.tld" prefix="myhr" %>
<html>
<head>
<title>hello</title>
</head>
<body>
<myhr:MyHr/>
</body>
</html>

加载中
返回顶部
顶部