2010-09-24 20 views
48

Eclipse (Helios) segnala occasionalmente un contenuto JSP in cerca di validi errori. Sembra che si rompa spesso quando uso il < c: se tag >. Ad esempio, in una JSP con appena questo contenuto:Errori di convalida JSP Eclipse misteriosi

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

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

</body> 
</html> 

i seguenti errori mostrano nella scheda "problemi" dopo compilo:

  • incompatibili tipi operandi stringa e int linea 1
  • javax.servlet.jsp.JspException non può essere risolto in una linea di tipo 1
  • javax.servlet.jsp.PageContext non può essere risolto in una linea di tipo 1

Il codice funziona correttamente. La convalida per JSP ha problemi, mi manca qualcosa di ovvio, o questo indica che qualcosa non è impostato correttamente.

+8

Spegnere. Il validatore JSP di Eclipse è uno e tutti gli errori epici. Domande correlate: http://stackoverflow.com/questions/1790749/jsp-el-expression-language-causing-problems-in-eclipse, http://stackoverflow.com/questions/2268153/somevariable-cannot-be-resolved -error-indicato-in-eclipse-per-un-incluso-jsp, http://stackoverflow.com/questions/2975168/eclipse-what-are-thes-jsp-errors – BalusC

+0

Tende a funzionare bene in Dynamic Web Projects . Molte persone si lamentano di configurazioni che non sono DWP senza menzionare affatto questo fatto. – nitind

risposta

35

Sulla base dei commenti, ho finito per disattivare parte della convalida JSP, che ha risolto questo problema.

  1. Passare a "Progetto-> Proprietà-> Convalida".
  2. Fare clic su "Configura impostazioni area di lavoro ...".
  3. Deseleziona le opzioni per Convalida sintassi JSP. È necessario deselezionare entrambi i manuali e creare

Speravo mi mancasse qualcosa e c'era un modo per risolvere questo problema, ma devo ammettere che la convalida JSP è spazzatura.

+3

Il file JSP va bene, cambio un po 'di testo a caso (nemmeno il codice JSTL o JSP), e all'improvviso ho dei piccoli scricchiolii rossi ovunque, in posti casuali (non sottolineando nemmeno il codice di cui si lamentano). Quindi, ovviamente, Rational Application Developer non mi consente di distribuire l'intera app sul server perché pensa che ci siano errori. Così stupido. Grazie per la correzione. –

1

Provare a verificare il percorso di classe del progetto. Sembra che tu non abbia la libreria JSP nel tuo progetto (da qui la "JspException non può essere risolta"), o che la tua versione della libreria non sia la stessa della versione del compilatore JSP.

La libreria è inclusa per impostazione predefinita nel server applicazioni su cui viene distribuita l'app, quindi il codice viene eseguito perfettamente al momento della distribuzione. Tuttavia, se il compilatore interno di Eclipse manca una libreria (o ha una versione errata), l'editor di Eclipse mostra un errore che non esiste nel server delle app.

+2

Onestamente, ottengo questi errori tutto il tempo dall'editor JSP di Eclipse - e cose come sottolineando pezzi di codice che non si integrano nemmeno sintatticamente - indipendentemente da ciò che aggiungo JARs. Non fraintendermi, sono un grande fan di Eclipse, ma l'editor JSP è inutile. – dty

+0

ARGH! Se l'editor non funziona correttamente e il percorso di creazione del progetto è impostato correttamente come descritto da Vivien, apri una segnalazione di bug. – nitind

5

Al fine di risolvere il problema:.
- javax.servlet.jsp * ha bisogno jsp-api.jar
- javax.servlet.http * ha bisogno di servlet-api.jar

è necessario aggiungere questi. librerie su Java Crea percorso nell'impostazione del progetto. Queste librerie possono essere trovate nella directory tomcat/lib (per Tomcat 6.0).

1

Ho avuto lo stesso problema e alla fine ce l'ha a lavorare commutando (con Maven) alla versione 2.3 del servlet-api:

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

Apparentemente 2.4 e superiori non hanno javax.servlet.jsp costruisci più. Potresti riuscire a trovare quella libreria in un altro pacchetto se desideri ancora utilizzare 2.4 o versione successiva.

45

Bene, ho trovato come risolvere questo errore. Aggiungi questo alla dipendenza Maven (pom.xml):

Fare commenti se lo trovate utile, per quanto mi ha aiutato.

+0

L'aggiunta di un ambito fornito probabilmente sarà anche intelligente poiché probabilmente il contenitore è già installato. – Knubo

+1

Aggiungi un " fornito" appena prima del tag nella configurazione di dipendenze di maven sopra (Basta azzerare il punto di Knubo) –

+5

Non ha funzionato per me. –

2

La soluzione per le dipendenze di Eclipse che non devono essere distribuite è l'aggiunta del contenitore UserLibrary e includerlo nei progetti dipendenti.

  1. Creare dir ad esempio/home/utente/* Eclipse dipendenze/e copiare jsp-api.jar da */tomcat/dir lib
  2. In Eclipse Vai al progetto proprietà-> costruire il percorso, e creare nuova "UserLibrary" ad es. IdeDeps.
  3. Include/home/user/eclipse-deps/nella libreria IdeDeps e include la libreria utente in tutti i progetti che dipendono da jsp-api.jar (in classpath: < classpathentry kind = "con" path = "org. eclipse.jdt.USER_LIBRARY/IdeDeps "/ >)

è possibile farlo per tutti * .jars che non devono essere implementate, ma eclissi bisogno per scopi di convalida.

1

È necessario includere jap-api.jar nel classpath.

0

Aggiungendo jsp-api.jar nel classpath di build è possibile correggerlo. jsp-api.jar è sotto common\lib per 5.x Tomcat

0

vedo anche lo stesso problema durante sposto a Maven (con M2E), ottiene errore come "javax.servlet.http non può essere risolto" e alcuni tag primavera undefined avvertimento. alla fine trovo che è perché la versione java (v1.6) nella mia configurazione di build non è la stessa della configurazione di facet (v1.7). dopo la modifica dalla v1.7 alla v1.6 il problema scompare.

20

Ho avuto lo stesso problema, il problema è la biblioteca jsp-api, è possibile aggiungere la dipendenza al pom (come spiegato in altre risposte) o si può anche aggiungere il bersaglio run-time ed eclissi automaticamente aggiungi quella libreria al tuo percorso di classe:

E selezionare il server.

+1

Mi piace questa soluzione perché non mi ha richiesto di disattivare la validazione jsp (buttando il bambino fuori con l'acqua del bagno IMO), e non mi ha richiesto di apportare una modifica al pom mantenendo la modifica vincolata al mio locale impostare. Grazie! –

2

Per Tomcat 7.0.x è necessario quanto segue nel 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

Questa è una vecchia questione, ma pensato che avrei potuto citare ottengo questo anche a Juno su Mac OS X-specificamente il più delle volte dopo che ho cambiato un file esternamente e quindi aggiornare il progetto in Eclipse. Sottolinea in tutti i tipi di luoghi strani, anche a metà delle parole nei commenti JSP.

Potrebbe (probabilmente ?!) essere correlato a bug 376926 che apparentemente è stato risolto un po 'più di una settimana fa?

0

Ho avuto lo stesso problema, ma entrambi jsp-api.jar e servlet-api.jar erano già in percorso di generazione. La disabilitazione del validatore di sintassi JSP non ha aiutato anche la convalida della sintassi .

Invece, ho dovuto disabilitare JSP Content Validator, lasciando abilitato il validatore di sintassi.Ho ancora sottolineato codice nel mio JSP, ma senza croce rossa che indica errore di compilazione e questo è il punto :)

1

Un modo molto più semplice è quello di

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

Select add Libraries. Da lì selezionare Server Runtime. Elencherà tutti i runtime del server che hai configurato. Da lì selezionare il runtime del server con cui è stato suddiviso il progetto.

Questo ricostruirà e riconvaliderà il progetto e tutti questi errori fantasma verranno rimossi.

Spero che questo aiuti.

0

Come molti di voi hanno menzionato, i problemi riguardano il percorso di compilazione e le librerie mancanti. Ho trovato una soluzione molto semplice a questo problema con il percorso di costruzione. Ecco la soluzione: In "Percorso build Java" in eclissi, vai alla scheda "Ordina ed esporta" e assicurati che le librerie "Apache Tomcat v7.0" (o qualsiasi altra versione di Tomcat installata con Eclipse) siano controllato. Questo risolve istantaneamente il problema. Nessun problema con qualcos'altro. :-)

In questo caso non è necessario disattivare alcuna convalida.

0

Per me, mentre scrivevo manualmente la linea, ho ricevuto un errore fino a quando non ho chiuso il tag, ma l'errore non è mai andato via. Ho trovato una riga di codice simile e ho eliminato il codice incriminato, copiato e incollato il codice corretto, quindi apportato le modifiche all'interno del tag in base alle esigenze. Niente più errori !!! Non è una soluzione ideale, ma ha funzionato per me.

Problemi correlati