自定义taglib导致“PWC6033:无法编译JSP的类”

时间:2010-07-09 23:33:16

标签: java jetty taglib

当我尝试在我的webapp中使用自定义taglib时,它不能在OS X(或Windows)上运行,使用Eclipse和Run Jetty Run。当我把文件加起来并在运行apache-tomcat-6.0.20的linux服务器上运行它们时,没有问题。我在两种环境中都使用第三方自定义taglib而没有任何问题。

org.apache.jasper.JasperException: PWC6033: Unable to compile class for JSP

PWC6197: An error occurred at line: 6 in the jsp file: /temp.jsp
PWC6199: Generated servlet error:
com.test cannot be resolved to a type
 at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:107)
 at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:280)
 at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:350)
 at org.apache.jasper.compiler.Compiler.compile(Compiler.java:411)
 ...

自定义taglib tld看起来像

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC 
 "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
 "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
 <tlib-version>1.0</tlib-version>
 <jsp-version>2.0</jsp-version>
 <short-name>test</short-name>
 <uri>http://test.com/test.tld</uri>
 <description>Test</description>

 <tag>
  <name>custom</name>
  <tag-class>com.test.CustomTag</tag-class>
  <body-content>empty</body-content>
  <description>Custom tag</description>
 </tag>
</taglib>

标签处理程序

package com.test;

import javax.servlet.jsp.tagext.TagSupport;

public class CustomTag extends TagSupport {

 private static final long serialVersionUID = 1L;

}

最后是temp.jsp

<%@ taglib uri="http://test.com/test.tld" prefix="test" %>
Hi
<test:custom/>

我认为我的taglib定义/配置是正确的,因为整个部件在部署到tomcat时都能正常工作,但我一整天都在努力使这个在Jetty中工作无济于事。

3 个答案:

答案 0 :(得分:1)

SOOOOOOOOOOO烦人!!!!我希望上帝有人发现这一点,并且它总是在我浪费试图找出解决方案时拯救他们。我相信这是Jetty的一个问题。

我在com包中也有一个类Test。所以无论出于何种原因,Jetty都会去寻找com.test.CustomTag并最终在com.Test中寻找内部类?无论如何,将CustomTag移动到另一个包(或移动或重命名com.Test)修复了问题。

答案 1 :(得分:1)

得到了解决方案。虽然我的日食在编译时没有显示错误。 Jetty在运行时,没有找到我添加的新类属性。由于maven还没有产生它。

我运行了这两个命令,之后事情很好。 1.清洁 2. mvn install -DskipTests

答案 2 :(得分:0)

我遇到了同样的问题。 Jetty但是自定义标签文件(没有taglib)

由于泰勒的帖子(2010年7月10日0:45),我将放弃。我可以向码头人群陈述我的情况。我无法将自定义标记移动到另一个包,因为它是一个标记文件,并且不会声明包。

在Eclipse中它运行正常。所有Junit测试都是绿色的。 'mvn test'与PWC6033失败,但没有进一步的详细信息。我只能猜到在部署到服务器时显然运行正确的标记文件。

如果jetty / maven没有正确解决导入,那对我来说听起来像是个错误。

为了完整性,这是我在 /WEB-INF/tags/ognl.tag

的标签文件
<%@tag import="de.mypackage.WebUtils"
%><%@tag body-content="empty"
%><%@attribute name="value" required="true"
%><%=WebUtils.ognl(request, value)%>

WebUtils获取HttpServletRequest以获取属性值,而另一个参数将某些内容打印成标准输出。