具体错误加下面:
--------------------------------
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 标签检索不到。
你可以试试把名字改成其他,可不可以检索到!
message 标签检索不到。
你可以试试把名字改成其他,可不可以检索到!
#2
prefix="mytaglib"
#3
MessageTag是定义的标签处理类的名字
#4
MessageTag是标签处理类的名称
#5
错误原因:是要用package mypack语句将其放到一个包中。但是不明白为什么
#1
MessageTag cannot be resolved to a type
message 标签检索不到。
你可以试试把名字改成其他,可不可以检索到!
message 标签检索不到。
你可以试试把名字改成其他,可不可以检索到!
#2
prefix="mytaglib"
#3
MessageTag是定义的标签处理类的名字
#4
MessageTag是标签处理类的名称
#5
错误原因:是要用package mypack语句将其放到一个包中。但是不明白为什么