2009-07-29 6 views
9

Ich versuche, Spring in eine JSF-Anwendung zu integrieren.Klasse org.springframework.web.jsf.el.SpringBeanFacesELResolver muss den Typ erweitern javax.el.ELResolver

In faces-config.xml, ich habe diese enthalten:

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

aber es zeigt eine seltsame Warnung, die ich kann nicht loswerden:

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

Irgendwelche Ideen?

Antwort

0

Nun verschwand mein Problem, diese Zeilen ersetzt durch:

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

hoffe, es hilft!

+9

Variable Resolver wurde nach JSF 1.1 veraltet – Cracker

1

Dies ist möglicherweise ein ClassLoader-Konfigurationsproblem. Wenn die übergeordnete Klasse von SpringBeanFacesELResolver von einem anderen ClassLoader stammt als die Klasse, die von den JSF-Klassen verwendet wird, die das Bootstrapping durchführen, schlägt die Überprüfung fehl, ob es sich um eine Instanz von ELResolver handelt.

Probleme wie diese können auftreten, wenn Sie eine META-INF/faces-config.xml im globalen Klassenpfad haben, aber ich vermute, es könnte andere Ursachen haben.

Es wäre hilfreich, wenn Sie Informationen über den von Ihnen verwendeten Container, die Classloader-Richtlinie für Ihre Anwendung und den Speicherort von Bibliotheken von Drittanbietern (z. B. Facelets und Spring-Bibliotheken) bereitstellen.

0

Bitte überprüfen Sie die JAR-Dateien, die Sie in der Anwendung verwenden. Auch hier sind die Klassenpfade in der Anwendung festgelegt. Ich denke es liegt an den Klassenkonflikten in Anwendungsklassenpfaden.

11

Vom spring documentation, werden Sie, dass für org.springframework.web.jsf.el.SpringBeanFacesELResolver sehen:

Delegierten des Spring 'Business-Kontext' WebApplicationContext zuerst, dann auf den Standard Resolver des JSF zugrunde liegenden Implementierung

und für org.springframework.web.jsf.DelegatingVariableResolver:

wird zunächst Wert Delegat-Lookups auf den Standard Resolver der JSF Implementierung zugrunde liegen und dann in Spring ‚Business-Kontext‘ WebApplicationContext

Wie Sie sehen können, ist das Verhalten sehr unterschiedlich ist. Wenn Ihnen die Reihenfolge egal ist, geht es Ihnen gut, aber wenn Sie tatsächlich org.springframework.web.jsf.el.SpringBeanFacesELResolver verwenden wollten, müssen Sie lediglich die Version von el-api.jar in Ihrem System sichern Abhängigkeiten ist kompatibel mit Ihrer Version von Feder.Für mich, ich habe diese (in meinem 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, von mvnrepository.com fand ich dieses und es löste das Problem:

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

Konfigurieren Sie Ihre Projektfacetten. Denn mit dem lokalen Server laufen

enter image description here

1

Um diese Art von Problem zu lösen Sie Projekt mit javax prefix verlängern sollte, weil Class ELResolver ein abstract class unter javax.el package ist.

Hier Code:

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

Mehr Informationen über ELResolver Klasse, die Sie von link bekommen.

Verwandte Themen