当我尝试在我的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中工作无济于事。
答案 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以获取属性值,而另一个参数将某些内容打印成标准输出。