Dostęp do springowych beanów z poziomu klasy validatora JSF
Od pewnego czasu wykonujemy w dwuosobowym zespole projekt w oparciu o Spring, Hibernate i JSF. Po drodze napotykamy dość często na różnego rodzaju problemy. Jednym z nich był dostęp z poziomu klasy implementującej jsf’owy interfejs Validator do zdefiniowanych w kontekście springowym beanów. Początkowo chciałem zadeklarować klasę walidatora w faces-config oraz w applicationContext ale tym sposobem tworzone są dwie niemające nic ze sobą wspólnego instancje interesującej mnie klasy. Drugie rozwiązanie okazało się już lepsze: standardowo korzystamy z org.springframework.web.jsf.DelegatingVariableResolver (którego deklarujemy w faces-config). W metodzie validate(..) natomiast korzystamy z takiej oto mniej więcej linijki w celu dostępu do beana:
ServiceLocator serviceLocator =
(ServiceLocator) facesContext.getApplication().
createValueBinding("#{serviceLocator}").getValue(facesContext);
Gdzie ServiceLocator to nazwa klasy a serviceLocator to nazwa springowego bean’a.
Bardzo możliwe, że da się to zrobić w bardziej elegancki sposób za pomocą biblioteki jsf-spring. Niestety projekt ten w tym momencie właściwie nie posiada dokumentacji, a ja nie posiadam czasu na wnioskowanie co i jak z api. Jeśli ktoś używał tego dzieła, proszę o jakieś info.








January 16th, 2009 at 09:45
Obecnie używam RichFaces ze względu na łatwą i efektywną integrację ze SpringFramework. Szkielety RichFaces, Spring Framework i Hibernate Validator dają się idealnie integrować. W moim artykule opisałem sposób wykorzystania anotacji szkieletu Hibernate Validator w ramach stron jspx wykorzystujacych odpowiedni komponent RichFaces. Dodałem także aplikacje przykładową, może okaże się pomocna.