【问题标题】:custom taglibs cause "PWC6033: Unable to compile class for JSP"自定义标记库导致“PWC6033:无法为 JSP 编译类”
【发布时间】:2010-07-09 23:33:16
【问题描述】:

当我尝试在我的 web 应用程序中使用自定义标记库时,它在 OS X(或 Windows)上、使用 Eclipse 和 Run Jetty Run 时不起作用。当我对文件进行 WAR 并在运行 apache-tomcat-6.0.20 的 linux 服务器上运行它们时,没有问题。我在两种环境中都使用 3rd 方自定义标记库,没有问题。

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 中无济于事。

【问题讨论】:

  • 所以在 windows 上,我现在尝试使用 1.6 JDK(而不是默认的 JRE)在 run-jetty-run 上运行应用程序,但这会产生同样的问题。

标签: java jetty taglib


【解决方案1】:

太烦了!!!!我希望上帝,有人发现了这一点,它可以节省我浪费在试图找出解决方案的所有时间。我认为这是 Jetty 的问题。

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

【讨论】:

    【解决方案2】:

    找到解决方案。虽然我编译时我的 Eclipse 没有显示错误。 Jetty 运行时,没有找到我添加的新类属性。由于 maven 尚未生成它。

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

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。 Jetty 但自定义标记文件(无标记库)

      由于 Tyler 的帖子,我将在这里放弃(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 以获取属性值和另一个参数,该参数确实将一些内容打印到标准输出中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-26
        • 1970-01-01
        • 2017-05-12
        • 2017-12-13
        • 2017-12-13
        • 2015-11-15
        • 2021-10-04
        相关资源
        最近更新 更多