пользовательские теги вызывают "PWC6033: невозможно скомпилировать класс для JSP" - PullRequest
3 голосов
/ 10 июля 2010

Когда я пытаюсь использовать пользовательские ярлыки в своем веб-приложении, оно не работает в OS X (или Windows), с использованием Eclipse и Run Jetty Run. Когда я запускаю файлы и запускаю их на моем сервере Linux, работающем под управлением apache-tomcat-6.0.20, проблем не возникает. Я использую пользовательские теги сторонних производителей без проблем в обеих средах.

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 ]

1 голос
/ 17 апреля 2014

Получил решение.Хотя мое затмение не показало ошибку при компиляции.Причал, когда побежал, не нашел новый атрибут класса, который я добавил.Поскольку maven еще не сгенерировал его.

Я выполнил эти 2 команды, и потом все было хорошо.1. mvn clean 2. mvn install -DskipTests

1 голос
/ 10 июля 2010

СООООООООООО раздражает !!!! Я надеюсь БОГУ, что кто-то найдет это, и это спасет их все время, которое я потратил впустую, пытаясь найти решение. Я считаю, что это проблема с Jetty.

У меня также был класс Test в пакете com. Так что по какой-то причине Jetty будет искать com.test.CustomTag и в конечном итоге искать внутренний класс, возможно, внутри com.Test? В любом случае перемещение CustomTag в другой пакет (или перемещение или переименование com.Test) устранило проблему.

0 голосов
/ 12 сентября 2012

У меня примерно такая же проблема.Пристани, но пользовательские файлы тегов (без taglib)

Я сдамся здесь из-за сообщения Тайлера (10 июля 2010 года в 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 для получения значения атрибута и другого параметра, который выводит некоторыевещи в стандартный выход.

...