2009-07-29 13 views
9

Próbuję zintegrować Spring z aplikacją JSF.Klasa org.springframework.web.jsf.el.SpringBeanFacesELResolver musi rozszerzyć typ javax.el.ELResolver

W faces-config.xml, mam włączone to:

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

ale pokazuje dziwne ostrzeżenia, których nie mogę się pozbyć:

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

jakieś pomysły?

Odpowiedz

0

Więc mój problem zniknął zastąpienie tych linii przez:

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

nadzieję, że to pomaga!

+9

zmienna funkcja rozpoznawania została uznana za przestarzałą po JSF 1.1 – Cracker

1

Jest to prawdopodobnie problem z konfiguracją ClassLoader. Jeśli klasa nadrzędna SpringBeanFacesELResolver pochodzi z innej klasy ClassLoader do tej używanej przez klasy JSF podczas ładowania, sprawdzenie, czy jest to instancja ELResolver, nie powiedzie się.

Takie problemy mogą wystąpić, jeśli w globalnej ścieżce klas występuje META-INF/faces-config.xml, ale przypuszczam, że mogą istnieć inne przyczyny.

Pomoże Ci, jeśli opublikujesz informacje o tym, jakiego kontenera używasz, o polityce modułu ładującego dla twojej aplikacji i gdzie umieściłeś jakiekolwiek biblioteki stron trzecich (takie jak Facelets i biblioteki Spring).

0

Proszę sprawdzić pliki JAR, których używasz w aplikacji. Znów ścieżki klas ustawione w aplikacji. Myślę, że dzieje się tak z powodu konfliktów klas w ścieżkach klas aplikacji.

11

Z spring documentation, widać, że dla org.springframework.web.jsf.el.SpringBeanFacesELResolver:

delegatów na wiosnę w kontekście biznesowym „” WebApplicationContext , potem do domyślnej rezolwerem z bazowego JSF realizacja

i org.springframework.web.jsf.DelegatingVariableResolver:

najpierw wyszukiwań Wartość przekazać domyślnej rezolwerem z podstawowym zastosowaniem JSF a następnie do skoku w kontekście biznesowym „” WebApplicationContext

Jak widać, zachowanie jest zupełnie inna. Jeśli nie dbasz o porządek, wszystko jest w porządku, ale jeśli rzeczywiście zamierzałeś użyć org.springframework.web.jsf.el.SpringBeanFacesELResolver, wszystko co musisz zrobić, to sprawdzić wersję pliku el-api.jar w swoim zależności są zgodne z twoją wersją wiosny.Dla mnie, mam to (w moim 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

dziękuję # saadi90 z mvnrepository.com znalazłem to i to rozwiązało problem:

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

Skonfiguruj swoje aspekty projektu. Dla uruchomienia z lokalnego serwera

enter image description here

1

W celu rozwiązania tego typu problemów należy rozszerzyć projekt o javax prefix ponieważ Class ELResolver jest abstract class pod javax.el package.

Oto kod:

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

Więcej informacji o klasie ELResolver można uzyskać przez link.