2010-09-24 16 views
48

Eclipse (Helios) de vez en cuando marca que el contenido JSP con aspecto válido tiene errores. Parece que a menudo se rompe cuando uso la etiqueta < c: if >. Por ejemplo, en una JSP con sólo este contenido:Mysterious Eclipse JSP Validation Errors

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<html> 
<body> 

<c:if test="${1 == 1}"> 
something 
</c:if> 

</body> 
</html> 

los siguientes errores muestran en la pestaña de "problemas" después Compilo:

  • tipos de operando incompatibles cuerda y int línea 1
  • javax.servlet.jsp.JspException no se puede resolver a una línea de tipo 1
  • javax.servlet.jsp.PageContext no se puede resolver a una línea de tipo 1

El código funciona bien. ¿La validación de las JSP tiene problemas, me falta algo obvio, o esto indica que algo no está configurado correctamente?

+8

Apágalo. El validador JSP de Eclipse es uno y todos los errores épicos. Preguntas relacionadas: http://stackoverflow.com/questions/1790749/jsp-el-expression-language-causing-problems-in-eclipse, http://stackoverflow.com/questions/2268153/somevariable-cannot-be-resolved -error-indicó-en-eclipse-para-un-incluido-jsp, http://stackoverflow.com/questions/2975168/eclipse-what-are-these-jsp-errors – BalusC

+0

Tiende a funcionar bien en proyectos web dinámicos . Muchas personas se quejan de configuraciones que no son DWP sin mencionar ese hecho en absoluto. – nitind

Respuesta

35

En base a los comentarios, terminé desactivando parte de la validación de JSP, que solucionó esto.

  1. Ir a "Proyecto-> Propiedades-> Validación".
  2. Haga clic en "Configurar ajustes del espacio de trabajo ...".
  3. Deseleccione las opciones para el Validador de sintaxis JSP. Necesita desmarcar tanto manual como de compilación

Tenía la esperanza de que me faltaba algo y había una forma de solucionarlo, pero debo admitir que la validación de JSP es basura.

+3

El archivo JSP está bien, cambio un poco de texto aleatorio (ni siquiera código JSTL o JSP), y de repente tengo pequeños squigglies rojos en todas partes, en lugares aleatorios (sin subrayar siquiera el código del que se quejan). Entonces, por supuesto, Rational Application Developer no me permitirá implementar toda mi aplicación en el servidor porque cree que hay errores. Tan estupido. Gracias por la corrección. –

1

Intente verificar la classpath de su proyecto. Parece que no tiene la biblioteca JSP en su proyecto (de ahí que "JspException no se puede resolver"), o que su versión de biblioteca no es la misma que la versión del compilador JSP.

La biblioteca está incluida por defecto en el servidor de aplicaciones en el que implementa su aplicación, por lo que el código se ejecuta perfectamente cuando se implementa. Sin embargo, si al compilador interno de Eclipse le falta una biblioteca (o tiene una versión incorrecta), el editor de Eclipse muestra un error que no existe en el servidor de la aplicación.

+2

Honestamente, recibo estos errores todo el tiempo del editor Eclipse JSP, y cosas como subrayar fragmentos de código que ni siquiera coinciden sintácticamente, independientemente de los JAR que agregue. No me malinterpreten, soy un gran fanático de Eclipse, pero el editor JSP es inútil. – dty

+0

ARGH! Si el editor se comporta mal y la ruta de compilación del proyecto está configurada correctamente como describe Vivien, abra un informe de error. – nitind

5

Para fijar:.
- javax.servlet.jsp * necesita jsp-api.jar
- javax.servlet.http * necesita servlet-api.jar

es necesario agregar estos. bibliotecas a Java Ruta de compilación en la configuración del proyecto. Estas bibliotecas se pueden encontrar en el directorio tomcat/lib (para Tomcat 6.0).

1

que tenían el mismo problema y, finalmente, tengo que trabajar por el cambio (con Maven) a la versión 2.3 del servlet-api:

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>2.3</version> 
    <scope>provided</scope> 
</dependency> 

Al parecer, 2.4 y superiores no tienen javax.servlet.jsp construir más. Es posible que pueda encontrar esa biblioteca en otro paquete si aún desea usar 2.4 o superior.

45

Bien, he encontrado cómo solucionar este error. Agregue esto a su dependencia Maven (pom.xml):

<!-- dependency to fix JSPServletException --> 
    <dependency> 
     <groupId>org.apache.tomcat</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>6.0.32</version> 
     <scope>provided</scope>    
    </dependency> 

Haz un comentario si lo encuentras útil, tanto como me ayudó.

+0

Agregar un alcance proporcionado probablemente también sea inteligente ya que su contenedor probablemente ya lo tiene instalado. – Knubo

+1

Agregue un " proporcionado" justo antes de la etiqueta en la configuración de dependencia maven anterior (Simplemente aclarando el punto de Knubo) –

+5

No funcionó para mí. –

2

La solución para las dependencias de eclipse que no se debe implementar es agregar el contenedor UserLibrary e incluirlo en proyectos dependientes.

  1. Crear dir por ejemplo/home/usuario */eclipse-deps/JSP y copia-api.jar de */Tomcat/dir lib
  2. En el Eclipse ir a proyectar propiedades-> Vía de construcción, y crear nueva "UserLibrary", por ejemplo. IdeDeps.
  3. Incluya/home/usuario/eclipse-deps/en la biblioteca IdeDeps e incluya la biblioteca de usuario en todos los proyectos que dependan de jsp-api.jar (en classpath: < classpathentry kind = "con" path = "org. eclipse.jdt.USER_LIBRARY/IdeDeps "/ >)

puede hacer que para todos * .jars que no deben ser desplegados, pero eclipsar lo necesitan para fines de validación.

1

Debe incluir jap-api.jar en su classpath.

0

Agregando jsp-api.jar en su compilación classpath lo arreglaría. jsp-api.jar está bajo common\lib para 5.x Tomcat

0

También veo el mismo problema durante la Primera SHIFT para Maven (con M2e), consigue error como "javax.servlet.http no se puede resolver" y algunas etiquetas de primavera indefinido advertencia. finalmente encuentro que es porque la versión de Java (v1.6) en mi configuración de compilación no es la misma que en la configuración de facetas (v1.7). después del cambio v1.7 a v1.6 el problema desaparece.

20

he tenido el mismo problema, el problema es la biblioteca jsp-api, se puede añadir la dependencia a su pom (como se explica en otras respuestas) o también puede añadir el objetivo tiempo de ejecución y el eclipse será automáticamente agregue esa biblioteca a su class-path:

Project -> Properties -> Targeted Runtimes 

Y seleccione su servidor.

+1

Me gusta esta solución porque no requería que desactivara la validación de jsp (arrojar al bebé con el baño de agua IMO), y no requería que hiciera un cambio al pom manteniendo la modificación restringida a mi local preparar. ¡Gracias! –

2

Para Tomcat 7.0.x necesita lo siguiente en su pom

<properties> 
    <org.apache.tomcat.version>7.0.28</org.apache.tomcat.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.apache.tomcat</groupId> 
     <artifactId>tomcat-jsp-api</artifactId> 
     <version>${org.apache.tomcat.version}</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 
3

Esta es una vieja pregunta, pero pensé que podría mencionar consigo esto también en Juno en Mac OS X, específicamente con mayor frecuencia después de cambiar un archivo externamente y luego actualizar el proyecto en Eclipse. Subraya en todo tipo de lugares extraños, incluso a la mitad de las palabras en los comentarios de JSP.

¿Podría (¿probable ?!) estar relacionado con bug 376926 que aparentemente se arregló hace un poco más de una semana?

0

que tenían el mismo problema, pero ambos jsp-api.jar y servlet-api.jar ya estaban en vía de construcción. Desactivar JSP Syntax Validator tampoco ayudó.

En su lugar, tuve que deshabilitar JSP Content Validator, dejando el validador de sintaxis habilitado.Todavía he subrayado en mi código de JSP, pero sin cruz roja que indica error de compilación y ese es el punto :)

1

Una manera mucho más fácil es

select the project -> Properties -> Java Build Path -> Libraries Tab

Seleccionar add Libraries. A partir de allí, seleccione Server Runtime. Enumerará todos los tiempos de ejecución del servidor que haya configurado. Desde allí, seleccione el tiempo de ejecución del servidor con el que ha asignado su proyecto.

Esto reconstruirá y revalidará el proyecto y todos estos errores de fantasmas se eliminarán.

Espero que esto ayude.

0

Como muchos de ustedes han mencionado, el problema está en la ruta de compilación y en las bibliotecas que faltan. Encontré una solución muy simple para este problema de compilación. Aquí está la solución: Bajo 'Java Build Path' en eclipse, vaya a la pestaña 'Ordenar y Exportar', y asegúrese de que las bibliotecas 'Apache Tomcat v7.0' (o cualquier versión de Tomcat que haya instalado con eclipse) sean comprobado. Esto soluciona el problema al instante. Sin problemas con nada más. :-)

No hay necesidad de desactivar ninguna validación en ese caso tampoco.

0

Para mí, mientras escribía la línea manualmente, recibí un error hasta que cerré la etiqueta, pero el error nunca desapareció. Encontré una línea de código que era similar, y eliminé el código ofensivo, copié y pegué el código bueno, y luego hice los cambios dentro de la etiqueta según fuera necesario. ¡¡¡No más errores !!! No es una solución ideal, pero funcionó para mí.