2009-07-29 24 views
9

Estoy intentando integrar Spring en una aplicación JSF.Clase org.springframework.web.jsf.el.SpringBeanFacesELResolver debe extender el tipo javax.el.ELResolver

En faces-config.xml, he incluido esta:

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

pero muestra una advertencia raro que no puedo deshacerme de:

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

¿Alguna idea?

Respuesta

0

Bueno mi problema desapareció la sustitución de estas líneas por:

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

espero que ayude!

+9

variable resolvió obsoleta después de JSF 1.1 – Cracker

1

Este es posiblemente un problema de configuración de ClassLoader. Si la clase primaria de SpringBeanFacesELResolver es de un ClassLoader diferente al utilizado por las clases JSF que realizan el bootstrapping, la comprobación para ver si es una instancia de ELResolver fallará.

Problemas como este pueden suceder si tiene un META-INF/faces-config.xml en el classpath global, pero supongo que podría haber otras causas.

Ayudaría si publicara información sobre qué contenedor está utilizando, la política del cargador de clases para su aplicación y dónde ha colocado bibliotecas de terceros (como las bibliotecas Facelets y Spring).

0

Compruebe los archivos JAR que está utilizando en la aplicación. De nuevo, las rutas de clases se establecieron en la aplicación. Creo que es debido a los conflictos de clase en las rutas de la clase de aplicación.

11

Desde el spring documentation, se verá que para org.springframework.web.jsf.el.SpringBeanFacesELResolver:

delegados a 'contexto empresarial' de la primavera WebApplicationContext primero, y luego a la resolución predeterminada de la subyace JSF aplicación

y para org.springframework.web.jsf.DelegatingVariableResolver:

en primer lugar las búsquedas de valor delegar en el almacenador por defecto de la aplicación subyacente JSF y luego a 'contexto empresarial' de primavera WebApplicationContext

Como se puede ver, el comportamiento es muy diferente. Si no le importa el orden, está bien, pero si en realidad tenía la intención de utilizar org.springframework.web.jsf.el.SpringBeanFacesELResolver, entonces todo lo que tiene que hacer es asegurarse de que la versión de el-api.jar en su dependencias es compatible con su versión de primavera.Para mí, tengo este (en mi pom experto):

<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

, gracias # saadi90, desde mvnrepository.com me encontré con esto y resolvió el problema:

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

Configure sus facetas de proyecto. Para funcionar con su servidor local

enter image description here

1

para resolver este tipo de problema que debe extenderse proyecto con javax prefix porque Class ELResolver es un abstract class bajo javax.el package.

Aquí es código:

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

Más información acerca de la clase ELResolver puede obtener por link.

Cuestiones relacionadas