2012-09-07 8 views
7

To moje pierwsze doświadczenie w tworzeniu aplikacji opartych na architekturze Java EE i używamJak zadeklarować komponent bean zarządzany przez JSF w aplikacji Spring 3.1?

  • JSF 2.0
  • Wiosna 3,1
  • JPA 2,0

Chcę zapytać, proszę o problem, z którym jestem trochę zdezorientowany. Chcę zadeklarować mój komponent bean zarządzany przez JSF, ale istnieje wiele rozwiązań, aby poradzić sobie z tym ograniczeniem:

  1. Deklaracja scalonej fasoli w pliku faces-config.xml.
  2. Zastąp mój kontroler adnotacją @ManagedBean.
  3. Zastąp mój kontroler adnotacją @Controller.

Moje pytanie brzmi: jaka jest różnica między tymi trzema rozwiązaniami?! i jakie zmiany powinienem wprowadzić na moim ApplicationConfig.java lub/i web.xml?! A jeśli chodzi o Spring, czy powinienem umieścić jakichś słuchaczy w moim web.xml?!

Naprawdę starałem się przeczytać wiele tutoriali i przykładów, ale za każdym razem, gdy znalazłem się zablokowany!

Odpowiedz

23

Kiedy integrujesz Spring i JSF, naprawdę nie możesz być początkującym w żadnej z technologii, ponieważ nie grają dobrze razem. Moja pierwsza i najlepsza rada dla ciebie to dostać kilka książek o JSF i Spring i naprawdę zrozumieć oba osobno przed próbą ich zintegrowania.

Zgodnie z tym, JSF jest opartym na komponentach systemem internetowym z naciskiem na MVC. Spring jest strukturą Dependency Injection i Inversion of Control, która nie dotyczy wyłącznie aplikacji internetowych.

Jeśli nie zrozumieć te trzy warunki są:

  • oparty Składnik Web Framework

  • Dependency Injection

  • odwrócenie sterowania

wtedy mój Sugestia jest taka, że ​​po prostu przestajesz robić to, co robisz i natychmiast rozpocząć czytanie.

Głównym problemem związanym z integracją tych dwóch rzeczy jest to, że istnieje pewien zakres pokrywania się obowiązków między tymi dwoma ramami, którymi należy się zająć. JSF jako autonomiczna struktura utrzymuje zakres własnych zarządzanych komponentów bez potrzeby oddzielnego frameworka DI. Jednak przy wprowadzaniu Springa będą oczywiście konflikty. Spring zarządza własnymi fasolami oprócz JSF, więc aby odnieść się do tych ManagedBeans i mieć obiekty biznesowe lub DAO być odpowiednio wstrzykiwane do ich użycia, JSF ManagedBeans muszą stać się Spring Controllerami.

Możesz zadeklarować JSF ManagedBean z adnotacją @Controller. Spring 3 jest wystarczająco inteligentny, aby rozpoznać, że jest to komponent bean zarządzany przez JSF, a nazwa komponentu będzie taka sama, jak nazwa deklarowana dla ManagedBean.

@Controller 
@Scope("session") 
@ManagedBean(name="testBean") 

Następnym problemem jest teraz, że trudny do opanowania EL Resolver dołączony do implementacji JSF. EL Resolver w zasadzie to robi, rozwiązuje wyrazy EL napotkane na twojej stronie XHTML/JSF. Podczas odwoływania się do testBean jednak nie będzie w stanie poprawnie rozpoznać tej nazwy, ponieważ odnosi się do fasoli zarządzanej przez JSF o tę nazwę, i nie będzie w stanie znaleźć kontrolera Spring ze wszystkimi wymaganymi wstrzyknięciami Spring.

Wiosna 3 rozwiązuje ten problem, dostarczając niestandardowy EL Resolver do użycia zamiast tego, który jest dołączony do twojej implementacji JSF. Można zadeklarować użycie go w faces-config.xml

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

Teraz wreszcie:

należy umieścić jakąś słuchaczy w moim web.xml?

Jeśli dopiero integracji JSF + sprężyna bez konieczności stosowania jakichkolwiek innych wiosennych kontrolowane serwletów lub bez potrzeby integracji Wiosna Bezpieczeństwa następnie nr nie trzeba nic dodatkowo w swoim web.xml. Będziesz musiał tylko zadeklarować FacesServlet i jego parametry kontekstowe oraz wszelkie inne serwlety bibliotek komponentów firm trzecich, które mogą być niezbędne dla twojej sytuacji.

+2

Świetne wyjaśnienie. Dzięki! – Kris

Powiązane problemy