【发布时间】:2020-04-14 23:30:52
【问题描述】:
JSP 中的自定义标签有很大的问题。我在 WEB-INF/tlds 中创建了一个名为“decorate”的标签库描述符文件。我将前缀设置为“d”。然后我创建了名为“decorateHandler”的标记处理程序类。
我想用简单的方式装饰我的 JSP 标题页中的文本,但我得到一个错误...
我的 decorate.tld 文件:
<tlib-version>1.0</tlib-version>
<short-name>l</short-name>
<uri>/WEB-INF/tlds/decorate</uri>
<tag>
<name>decorate</name>
<tag-class>decorateHandler</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>value</name>
</attribute>
</tag>
</taglib>
在 decorateHandler.java 我尝试这样做:
private String value;
private void writeTagBodyContent(JspWriter out, BodyContent bodyContent) throws IOException {
out.println("<font color='"+value+"'>");
bodyContent.writeOut(out);
out.println("</font>");
bodyContent.clearBody();
}
当然,我已经为 String 值变量创建了 getter 和 setter。
在 index.jsp 中,我已经像这样包含了 taglib:
<%@taglib uri="/WEB-INF/tlds/decorate.tld" prefix="d" %>
我尝试过这样的事情:
<d:decorate value="red">Lorem ipsum</d:decorate>
但我有一个例外:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: [112] in the jsp file: [/index.jsp]
decorateHandler cannot be resolved to a type
109: <li class="nav-item">
110: <a class="nav-link" href="index.jsp">
111: <img src="logo.png" height="20px" width="20px">
112: <d:decorate value="red">Lorem ipsum</d:decorate>
113: </a>
114: </li>
115: </ul>
An error occurred at line: [112] in the jsp file: [/index.jsp]
decorateHandler cannot be resolved to a type
109: <li class="nav-item">
110: <a class="nav-link" href="index.jsp">
111: <img src="logo.png" height="20px" width="20px">
112: <d:decorate value="red">Lorem ipsum</d:decorate>
113: </a>
114: </li>
115: </ul>
An error occurred at line: [112] in the jsp file: [/index.jsp]
The method get(Class<? extends Tag>) in the type TagHandlerPool is not applicable for the arguments (Class<decorateHandler>)
109: <li class="nav-item">
110: <a class="nav-link" href="index.jsp">
111: <img src="logo.png" height="20px" width="20px">
112: <d:decorate value="red">Lorem ipsum</d:decorate>
113: </a>
114: </li>
115: </ul>
An error occurred at line: [112] in the jsp file: [/index.jsp]
decorateHandler cannot be resolved to a type
109: <li class="nav-item">
110: <a class="nav-link" href="index.jsp">
111: <img src="logo.png" height="20px" width="20px">
112: <d:decorate value="red">Lorem ipsum</d:decorate>
113: </a>
114: </li>
115: </ul>
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:212)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:549)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:350)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:595)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Filtr2.doFilter(Filtr2.java:67)
我不知道是什么问题...:/
【问题讨论】: