Wie deklariert man eine JSF-gemanagte Bean in einer Spring 3.1-Anwendung?

7

Dies ist meine erste Erfahrung in der Entwicklung von Anwendungen, die auf einer Java-EE-Architektur basieren und ich verwende

  • JSF 2.0
  • Frühling 3.1
  • JPA 2.0

Ich möchte Sie bitte zu einem Thema fragen, mit dem ich ein wenig verwirrt bin. Ich möchte meine JSF-verwaltete Bean deklarieren, aber es gibt viele Lösungen, um mit dieser Einschränkung umzugehen:

  1. Deklarieren Sie die beanstandete Bean in faces-config.xml.
  2. Überschreibe meinen Controller mit der @ManagedBean Annotation.
  3. Überschreibe meinen Controller mit @Controller Annotation.

Meine Frage ist: Was ist der Unterschied zwischen diesen drei Lösungen? und welche Änderungen sollte ich an meiner ApplicationConfig.java oder / und web.xml vornehmen? Und bezüglich Spring, sollte ich einige Listener in meine web.xml?!?

einfügen

Ich habe wirklich versucht, viele Tutorials und Beispiele zu lesen, aber jedes Mal, wenn ich mich blockiert finde!

    
ayoubuntu 07.09.2012, 11:31
quelle

1 Antwort

23

Wenn Sie Spring und JSF integrieren, können Sie in beiden Technologien wirklich kein Anfänger sein, weil sie nicht gut zusammenspielen. Mein erster und bester Rat zu Ihnen ist, einige Bücher auf JSF und Frühling zu erhalten und wirklich beide separat zu verstehen, bevor Sie versuchen, sie zu integrieren.

JSF ist ein komponentenbasiertes Webframework mit Schwerpunkt auf MVC. Spring ist ein Dependency-Injection- und Inversion-Control-Framework, das nicht ausschließlich für Webanwendungen gilt.

Wenn Sie nicht verstehen, sind diese drei Begriffe:

  • Komponentenbasiertes Web-Framework

  • Abhängigkeitsinjektion

  • Umkehrung der Kontrolle

Dann mein Vorschlag ist, dass Sie einfach aufhören, was Sie tun und sofort anfangen zu lesen.

Das Hauptproblem bei der Integration dieser beiden Punkte besteht darin, dass sich die Zuständigkeiten zwischen den beiden zu überwindenden Rahmenbedingungen teilweise überschneiden. JSF als eigenständiges Framework behält den Umfang seiner eigenen verwalteten Beans bei, ohne dass ein separates DI-Framework benötigt wird. Bei der Einführung von Spring wird es natürlich Konflikte geben. Spring verwaltet seine eigenen Beans mit Ausnahme von JSF. Um diese ManagedBeans zu referenzieren und Geschäftsobjekte oder DAO ordnungsgemäß in diese zu integrieren, müssen die JSF ManagedBeans zu Spring Controllern werden.

Sie können eine JSF ManagedBean mit der Annotation @Controller deklarieren. Spring 3 ist intelligent genug, um zu erkennen, dass es sich um eine von JSF verwaltete Bean handelt und der Bean-Name wie auch immer der Name für ManagedBean ist.

%Vor%

Nun, da dies erledigt ist, ist das nächste Problem der lästige EL-Resolver, der mit Ihrer JSF-Implementierung geliefert wurde. Der EL-Resolver macht im Prinzip genau das, er löst EL-Ausdrücke auf, die auf Ihrer XHTML / JSF-Seite angetroffen werden. Wenn% ce_de% referenziert wird, kann dieser Name jedoch nicht korrekt aufgelöst werden, da er sich auf eine JSF-gesteuerte Bean mit diesem Namen bezieht und nicht in der Lage ist, den Spring Controller mit allen von Spring benötigten abhängigen Abhängigkeiten zu finden / p>

Spring 3 löst dieses Problem, indem es Ihnen einen benutzerdefinierten EL-Resolver zur Verfügung stellt, der anstelle des im Lieferumfang der JSF-Implementierung enthaltenen verwendet werden kann. Sie können angeben, dass es in testBean

verwendet werden soll %Vor%

Jetzt endlich:

  

sollte ich irgendeine Art von Zuhörern in meine web.xml?!

einfügen

Wenn Sie nur JSF + Spring ohne die Notwendigkeit für andere Spring-gesteuerte Servlets oder ohne Spring Security-Integration integrieren, dann brauchen Sie no in Ihrem faces-config.xml nichts Zusätzliches. Sie müssten nur das FacesServlet und seine Kontextparameter sowie alle anderen Komponentenbibliotheks-Servlets von Drittanbietern deklarieren, die für Ihre Situation erforderlich sein könnten.

    
maple_shaft 07.09.2012, 11:58
quelle

Tags und Links