web-dev-qa-db-fra.com

Erreurs de validation JSP Eclipse mystérieuses

Eclipse (Helios) marque de temps en temps le contenu JSP de recherche valide comme comportant des erreurs. Il semble que cela se produise souvent lorsque j'utilise la balise <c: if>. Par exemple, dans un JSP uniquement avec ce contenu:

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

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

</body>
</html>

Les erreurs suivantes apparaissent dans l'onglet "Problèmes" après ma compilation:

  • Types d'opérandes incompatibles String etint ligne 1
  • javax.servlet.jsp.JspException ne peut pas. être résolu en une ligne de type 1
  • javax.servlet.jsp.PageContext ne peut pasbe résolu en ligne de type 1

Le code fonctionne bien. La validation des JSP pose-t-elle des problèmes, manque-t-il quelque chose d'évident ou indique-t-il que quelque chose n'est pas configuré correctement?.

49
worpet

Sur la base des commentaires, j'ai fini par désactiver une partie de la validation JSP, ce qui a résolu le problème.

  1. Allez dans "Projet-> Propriétés-> Validation".
  2. Cliquez sur "Configurer les paramètres de l'espace de travail ...".
  3. Désélectionnez les options du validateur de syntaxe JSP (manuel et manuel).

J'espérais qu'il me manquait quelque chose et qu'il y avait un moyen de résoudre ce problème, mais je dois admettre que la validation JSP est indésirable.

36
worpet

Eh bien, j'ai trouvé comment résoudre cette erreur . Ajoutez ceci à votre dépendance 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>

Faites des commentaires si vous le trouvez utile, autant que cela m'a aidé.

45

J'ai eu le même problème, le problème est la bibliothèque jsp-api, vous pouvez ajouter la dépendance à votre pom (comme expliqué dans d'autres réponses) ou vous pouvez également ajouter l'exécution target et Eclipse sera automatiquement ajoutez cette bibliothèque à votre chemin de classe:

Project -> Properties -> Targeted Runtimes 

Et sélectionnez votre serveur.

21
rjcorujo

Afin de réparer:
- javax.servlet.jsp. * nécessite jsp-api.jar
- javax.servlet.http. * a besoin de servlet-api.jar

Vous devez ajouter ces bibliothèques au chemin de génération Java dans la configuration du projet. Ces bibliothèques se trouvent dans le répertoire Tomcat/lib (pour Tomcat 6.0).

5
Paranoja

C’est une vieille question, mais je pense pouvoir mentionner que j’obtiens cela également dans Juno sous Mac OS X - en particulier le plus souvent après avoir modifié un fichier en externe puis actualisé le projet dans Eclipse. Souligne dans toutes sortes de lieux étranges, même à mi-chemin des mots dans les commentaires JSP.

Pourrait-il (probablement?!) Être lié au bug 376926 qui semble avoir été corrigé il y a un peu plus d'une semaine?

3
Xander Plooy

Pour Tomcat 7.0.x, vous avez besoin des éléments suivants dans votre 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>
2
scarba05

La solution pour les dépendances Eclipse qui ne devrait pas être déployée consiste à ajouter le conteneur UserLibrary et à l'inclure dans les projets dépendants.

  1. Créez un répertoire, par exemple,/home/utilisateur */Eclipse-deps/et copiez jsp-api.jar à partir du répertoire */Tomcat/lib
  2. Dans Eclipse, allez dans propriétés du projet-> chemin de construction, et créez une nouvelle "UserLibrary", par exemple. IdeDeps.
  3. Inclure/home/user/Eclipse-deps/dans la bibliothèque IdeDeps et inclure la bibliothèque utilisateur dans tous les projets dépendant de jsp-api.jar (In classpath: <classpathentry kind = "con" path = "org.Eclipse .jdt.USER_LIBRARY/IdeDeps "/>)

Vous pouvez le faire pour tous les * .jars qui ne doivent pas être déployés, mais Eclipse en a besoin à des fins de validation.

2
kmajetic

Un moyen beaucoup plus facile est de 

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

Sélectionnez add Libraries. De là, sélectionnez Server Runtime. Il listera toutes les exécutions de serveur que vous avez configurées. À partir de là, sélectionnez le serveur d'exécution avec lequel vous avez associé votre projet. 

Cela reconstruira et revalidera le projet et toutes ces erreurs fantômes seront supprimées.

J'espère que cela t'aides.

1
Jafar Ali

Essayez de vérifier le classpath de votre projet. Il semble que votre projet ne contienne pas la bibliothèque JSP (par conséquent, "l’exception JspException ne peut pas être résolue") ou que la version de votre bibliothèque n’est pas identique à celle du compilateur JSP.

La bibliothèque est incluse par défaut dans le serveur d'applications sur lequel vous déployez votre application. Le code s'exécute donc parfaitement lorsqu'il est déployé. Toutefois, s'il manque une bibliothèque au compilateur interne Eclipse (ou si sa version est incorrecte), l'éditeur Eclipse indique une erreur qui n'existe pas dans le serveur d'applications.

1
Vivien Barousse

J'ai eu le même problème et je l'ai finalement fait fonctionner en passant (avec Maven) à la version 2.3 de servlet-api

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

Apparemment, les versions 2.4 et supérieures ne possèdent plus javax.servlet.jsp. Vous pourrez peut-être trouver cette bibliothèque dans un autre package si vous souhaitez toujours utiliser la version 2.4 ou supérieure.

1
Christiaan

Vous devez inclure jsp-api.jar dans votre chemin de classe.

1
Vishal

J'ai eu le même problème, mais jsp-api.jar et servlet-api.jar étaient déjà dans le chemin de génération. La désactivation de JSP Syntax Validator n'a pas non plus aidé.

Au lieu de cela, j'ai dû désactiver JSP Content Validator , en laissant le validateur de syntaxe activé. J'ai toujours du code souligné dans mon JSP, mais pas de croix rouge indiquant une erreur de compilation et c'est ce qui compte.

0
flawyte

Je vois aussi le même problème pendant que je passe à Maven (avec m2e), une erreur du type "javax.servlet.http ne peut pas être résolue" et certaines balises Spring averties. enfin, je trouve que c'est parce que la version Java (v1.6) de ma configuration de construction n'est pas identique à celle de la configuration des facettes (v1.7). après le changement de v1.7 à v1.6, le problème disparaît. 

0
deng hui

Comme nombre d'entre vous l'ont mentionné, le problème concerne le chemin de génération et les bibliothèques manquantes. J'ai trouvé un correctif très simple à ce problème de chemin de génération. Voici la solution: Sous "Chemin de construction Java" dans Eclipse, accédez à l'onglet "Commander et exporter" et assurez-vous que les bibliothèques "Apache Tomcat v7.0" (ou la version de Tomcat que vous avez installée avec Eclipse ) sont vérifiés. Cela résout instantanément le problème. Pas de soucis avec autre chose. :-)

Il n'est pas nécessaire de désactiver la validation dans ce cas non plus.

0
ChrisP

Ajouter jsp-api.jar dans votre chemin de classe de construction le corrigerait. jsp-api.jar est sous common\lib pour Tomcat 5.x

0
jackxie

Pour moi, alors que je tapais la ligne manuellement, j'ai eu une erreur jusqu'à ce que je ferme l'étiquette, mais l'erreur n'a jamais disparu. J'ai trouvé une ligne de code similaire, j'ai supprimé le code incriminé, copié et collé le code correct, puis apporté les modifications nécessaires dans la balise. Pas plus d'erreurs !!! Pas une solution idéale, mais cela a fonctionné pour moi.

0
user1668969