关于jsp自定义标签,访问该jsp网页错误,显示标签处理类can't be resolved to a type

时间:2022-01-11 20:53:40
每个地方都看了一遍,但还是找不到原因,请大神帮忙看下
具体错误加下面:
--------------------------------
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 10 in the jsp file: /login.jsp
MessageTag cannot be resolved to a type

10:         <title><mm:message key="login.title"/></title>        
Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:316)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:294)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:281)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
-----------------------------
部分jsp文件(出错的地方在标签处):

<%@ page contentType = "text/html; charset = utf-8" %>
<%@ taglib uri ="/mytaglib" prefix="mm" %>
<%
      String language = request . getParameter ("language");
      if (language == null) language ="English";
      session . setAttribute ("language",language);
%>
<html>
    <head>
        <title><mm:message key="login.title"/></title>            
    </head>
    <body>


mytaglib.tld文件设置如下:

<taglib>
    <tlib-version>1.1</tlib-version>
    <jsp-version>2.1</jsp-version>
    <short-name>mytaglib</short-name>
    <uri>/mytaglib</uri>
    
    <tag>
        <name>message</name>
        <tag-class>MessageTag</tag-class>
        <body-content>empty</body-content>
        <info>produce message by key</info>
        <attribute>
            <name>key</name>
            <required>true</required>
        </attribute>
    </tag>
</taglib>


web.xml中taglib标签设置如下

 <taglib>
        <taglib-uri>/mytaglib</taglib-uri>
        <taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
    </taglib>


处理类已经成功编译并放置到了WEB-INF/classes 下面
具体源码为:

import javax . servlet . jsp . tagext . * ;
import javax . servlet . jsp . * ;
import javax . servlet . http . * ;
import java .util . * ;

public class MessageTag extends TagSupport
{
        private String key = null ;
        public void setKey ( String key)        // 设置的话,是servlet容器自动设置的
        {
                this . key = key;
        }
        public String getKey ( ) 
        {
                return key ;
        } 
        /*我暂时不写getKey( ) ,应该也能运行通过*/
        public int doEndTag ( ) throws JspException
        {
                try
                {
                        Properties ps = (Properties)pageContext . getAttribute ("ps",pageContext.APPLICATION_SCOPE);        //PageContext 可以用来获得属性,也可以获得各种context 以及属性
                        Properties ps_ch = (Properties)pageContext . getAttribute ("ps_ch",pageContext.APPLICATION_SCOPE);
                        
                        HttpSession session = pageContext . getSession ( ) ;
                        String language = (String)session . getAttribute ("language") ;
                        
                        String message = null;
                        if (language != null && language . equals ("Chinese"))
                        {
                                message = (String)ps_ch . get (key) ; 
                                message = new String (message . getBytes ("ISO-8859-1"),"utf8");        // 默认是“ISO-8859-1”
                        }
                        else 
                        {
                                message = (String)ps . get(key) ; 
                        }
                        
                        pageContext .getOut ( ) . print (message);
                }
                catch (Exception e)
                {
                        throw new JspTagException (e) ; 
                }
                return EVAL_PAGE ; 
        }
}

5 个解决方案

#1


MessageTag cannot be resolved to a type
message 标签检索不到。
你可以试试把名字改成其他,可不可以检索到!

#2


prefix="mytaglib"

#3


引用 1楼yzsunlight 的回复:
MessageTag cannot be resolved to a type
message 标签检索不到。
你可以试试把名字改成其他,可不可以检索到!
MessageTag是定义的标签处理类的名字

#4


引用 1楼yzsunlight 的回复:
MessageTag cannot be resolved to a type
message 标签检索不到。
你可以试试把名字改成其他,可不可以检索到!
MessageTag是标签处理类的名称

#5


错误原因:是要用package mypack语句将其放到一个包中。但是不明白为什么

#1


MessageTag cannot be resolved to a type
message 标签检索不到。
你可以试试把名字改成其他,可不可以检索到!

#2


prefix="mytaglib"

#3


引用 1楼yzsunlight 的回复:
MessageTag cannot be resolved to a type
message 标签检索不到。
你可以试试把名字改成其他,可不可以检索到!
MessageTag是定义的标签处理类的名字

#4


引用 1楼yzsunlight 的回复:
MessageTag cannot be resolved to a type
message 标签检索不到。
你可以试试把名字改成其他,可不可以检索到!
MessageTag是标签处理类的名称

#5


错误原因:是要用package mypack语句将其放到一个包中。但是不明白为什么