2009-07-29 11 views
9

Sto cercando di integrare Spring in un'applicazione JSF.Classe org.springframework.web.jsf.el.SpringBeanFacesELResolver deve estendere il tipo javax.el.ELResolver

In faces-config.xml, ho incluso questo:

<application>  
    <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
    <view-handler>com.sun.facelets.FaceletViewHandler</view-handler> 
</application> 

ma mostra un avvertimento strano che non riesco a liberarmi di:

Class org.springframework.web.jsf.el.SpringBeanFacesELResolver must extend the type javax.el.ELResolver 

Tutte le idee?

risposta

0

Beh il mio problema è scomparso sostituendo queste righe da:

<!-- variable/property resolver registration --> 
    <application> 
     <view-handler>com.sun.facelets.FaceletViewHandler</view-handler> 
     <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver> 
    </application> 

Speranza che aiuta!

+9

resolver variabile deprecato dopo JSF 1.1 – Cracker

1

Questo è probabilmente un problema di configurazione di ClassLoader. Se la classe genitore di SpringBeanFacesELResolver proviene da un ClassLoader diverso da quello utilizzato dalle classi JSF eseguendo il bootstrap, il controllo per verificare se si tratta di un'istanza di ELResolver avrà esito negativo.

Problemi come questo possono accadere se si dispone di un META-INF/faces-config.xml nel classpath globale, ma suppongo che potrebbero esserci altre cause.

Sarebbe di grande aiuto se tu pubblicassi informazioni sul contenitore che stai usando, la politica del classloader per la tua applicazione e dove hai collocato eventuali librerie di terze parti (come le Facelets e le librerie Spring).

0

Controllare i file JAR in uso nell'applicazione. Di nuovo i percorsi di classe impostati nell'applicazione. Penso che sia a causa dei conflitti di classe nei percorsi delle classi di applicazioni.

11

Dal spring documentation, si vedrà che per org.springframework.web.jsf.el.SpringBeanFacesELResolver:

delegati a 'contesto di business' della primavera WebApplicationContext prima, poi al risolutore di default del sottostante JSF attuazione

e per org.springframework.web.jsf.DelegatingVariableResolver:

sarà primo valore delegato le ricerche al risolutore di default del sottostante implementazione JSF e poi a 'contesto di business' Primavera WebApplicationContext

Come si può vedere, il comportamento è molto diverso. Se non ti interessa l'ordine, stai bene, ma se in effetti hai intenzione di usare org.springframework.web.jsf.el.SpringBeanFacesELResolver allora tutto ciò che devi fare è assicurarti della versione di el-api.jar nel tuo le dipendenze sono compatibili con la tua versione di primavera.Per quanto mi riguarda, ho questo (a mio Maven POM):

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-web</artifactId> 
    <version>3.0.5.RELEASE</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>org.apache.tomcat</groupId> 
    <artifactId>el-api</artifactId> 
    <version>6.0.32</version> 
    <type>jar</type> 
    <scope>provided</scope> 
</dependency> 
0

Thanks # saadi90, da mvnrepository.com ho trovato questo ed è risolto il problema:

<dependency> 
    <groupId>org.glassfish.web</groupId> 
    <artifactId>el-impl</artifactId> 
    <version>2.2</version> 
</dependency> 
-1

Configura le faccette di Project. Per eseguire con il proprio server locale

enter image description here

1

per risolvere questo tipo di problema si dovrebbe estendere progetto con javax prefix perché Class ELResolver è un abstract class sotto javax.el package.

Ecco il codice:

<application> 
     <javax.el-resolver> 
     org.springframework.web.jsf.el.SpringBeanFacesELResolver 
     </javax.el-resolver>  
    </application> 

Maggiori informazioni sulla classe ELResolver è possibile ottenere da link.

Problemi correlati