2009-07-29 7 views
9

J'essaie d'intégrer Spring dans une application JSF.Classe org.springframework.web.jsf.el.SpringBeanFacesELResolver doit étendre le type javax.el.ELResolver

En faces-config.xml, j'ai inclus ceci:

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

mais il montre un avertissement bizarre que je ne peux pas me débarrasser de:

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

Toutes les idées?

Répondre

0

Eh bien, mon problème a disparu en remplaçant ces lignes par:

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

espère que ça aide!

+9

Le résolveur de variable a été déprécié après JSF 1.1 – Cracker

1

Il s'agit probablement d'un problème de configuration de ClassLoader. Si la classe parente de SpringBeanFacesELResolver provient d'un ClassLoader différent de celui utilisé par les classes JSF exécutant l'amorçage, la vérification pour voir s'il s'agit d'une instance de ELResolver échouera.

Des problèmes de ce type peuvent se produire si vous avez un fichier META-INF/faces-config.xml dans le chemin de classe global, mais je suppose qu'il pourrait y avoir d'autres causes.

Il serait utile si vous avez publié des informations sur le conteneur que vous utilisez, la politique du chargeur de classe pour votre application et où vous avez placé des bibliothèques tierces (telles que les bibliothèques Facelets et Spring).

0

Veuillez vérifier les fichiers JAR que vous utilisez dans l'application. Encore une fois les chemins de classe définis dans l'application. Je pense que c'est à cause des conflits de classes dans les chemins de classe d'application.

11

De l'spring documentation, vous verrez que pour org.springframework.web.jsf.el.SpringBeanFacesELResolver:

délégués à la « contexte commercial » du printemps WebApplicationContext d'abord, puis à la résolution par défaut de la sous-jacente JSF mise en œuvre

et org.springframework.web.jsf.DelegatingVariableResolver:

va d'abord lookups valeur délégué au résolveur par défaut de la mise en œuvre JSF sous-jacente et à la « contexte commercial » de printemps de WebApplicationContext

Comme vous pouvez le voir, le comportement est très différent. Si vous ne vous souciez pas de l'ordre, tout va bien, mais si vous aviez réellement l'intention d'utiliser org.springframework.web.jsf.el.SpringBeanFacesELResolver, alors tout ce que vous avez à faire est d'assurer la version de el-api.jar dans votre dépendances est compatible avec votre version du printemps.Pour moi, j'ai cela (dans mon 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

Merci # saadi90, de mvnrepository.com J'ai trouvé et résolu le problème:

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

Configurez vos facettes Project. Pour fonctionner avec votre serveur local

enter image description here

1

Pour résoudre ce type de problème que vous ETENDE projet avec javax prefix parce Class ELResolver est un abstract class sous javax.el package.

Voici le code:

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

Plus d'informations sur la classe ELResolver vous pouvez obtenir par link.

Questions connexes