2012-09-07 39 views
7

Esta mi primera experiencia en el desarrollo de aplicaciones basadas en una arquitectura Java EE y estoy usando¿Cómo declarar un bean gestionado JSF en una aplicación Spring 3.1?

  • JSF 2.0
  • Primavera 3.1
  • APP 2,0

Quiero pedirle que por favor acerca un problema con el que estoy un poco confundido. Quiero declarar mi bean gestionado JSF, pero hay muchas soluciones para hacer frente a esta restricción:

  1. Declare el bean gestionado en faces-config.xml.
  2. Anula mi controlador con la anotación @ManagedBean.
  3. Anula mi controlador con la anotación @Controller.

Mi pregunta es: ¿cuál es la diferencia entre estas tres soluciones?! y qué cambios debo hacer en mi ApplicationConfig.java o/y web.xml?! Y respecto a Spring, ¿debería poner algún tipo de oyentes en mi web.xml?!

Realmente traté de leer muchos tutoriales y ejemplos, ¡pero cada vez me encuentro bloqueado!

Respuesta

23

Al integrar Spring y JSF, realmente no se puede ser un principiante en ninguna de las dos tecnologías, ya que no funcionan bien juntas. Mi primer y mejor consejo para usted es obtener algunos libros sobre JSF y Spring y realmente entender ambos por separado antes de tratar de integrarlos.

Dicho esto, JSF es un marco web basado en componentes con énfasis en MVC. Spring es un marco de Inyección de Dependencia e Inversión de Control que no es exclusivo de las aplicaciones web.

Si no entiende estas tres condiciones son:

  • Component based framework web

  • inyección de dependencias

  • Inversión de Control

Entonces mi La sugerencia es que dejes lo que haces ing e inmediatamente comienza a leer.

El principal problema con la integración de estas dos cosas es que hay cierta superposición de responsabilidades entre los dos marcos que deben abordarse. JSF como un marco independiente mantiene el alcance de sus propios beans administrados sin la necesidad de un marco DI separado. Sin embargo, cuando se presenta Spring, naturalmente habrá conflictos. Spring maneja sus propios Beans aparte de JSF, por lo que para hacer referencia a estos ManagedBeans y tener objetos comerciales o DAO's correctamente inyectados en ellos para su uso, los JSF ManagedBeans necesitan convertirse en Spring Controllers.

Puede declarar un JSF ManagedBean con la anotación @Controller. Spring 3 es lo suficientemente inteligente como para reconocer que se trata de un bean gestionado JSF y el nombre del bean será el nombre que se declare como ManagedBean.

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

Ahora que esto se maneja, el siguiente problema es que molestos EL Resolver que viene con su aplicación JSF. El EL Resolver básicamente hace eso, resuelve las expresiones EL encontradas en su página XHTML/JSF. Sin embargo, al hacer referencia a testBean no podrá resolver este nombre correctamente ya que se refiere a un bean gestionado JSF con ese nombre, y no podrá encontrar el Spring Controller con todas las dependencias inyectadas de Spring que necesite.

Spring 3 resuelve este problema proporcionándole un EL Resolver personalizado para usar en lugar del que viene incluido con su implementación de JSF. Se puede declarar que pueda ser utilizado en faces-config.xml

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

Ahora, por fin:

debo poner algún tipo de oyentes en mi web.xml?!

Si se acaba integrando JSF + Primavera sin necesidad de ningún otro servlets controlado primavera o sin la necesidad de integración Spring Security continuación sin no es necesario nada adicional en su web.xml. Solo necesitaría declarar el FacesServlet y sus parámetros de contexto, más cualquier otro servlet de biblioteca de componentes de terceros que pueda ser necesario para su situación.

+2

Gran explicación. ¡Gracias! – Kris

Cuestiones relacionadas