Inyectar Beans de Spring en BackingBeans de JSF.

Los ámbitos y Scope de Spring y JSF son parecidos pero diferentes. Por ejemplo, Spring no contempla el ViewScoped de JSF 2.x.
Si queremos inyectar servicios Spring en JSF sin declaraciones explícitas, debemos hacer los siguientes cambios a nuestro proyecto:

En primer lugar debemos anexar al archivo faces-config.xml lo siguiente:


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

Al archivo web.xml


   <!-- Spring Context Configuration' s Path definition -->
      <context-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>
            /WEB-INF/application-context.xml
         </param-value>
      </context-param>
 
      <!-- The Bootstrap listener to start up and shut down Spring's root WebApplicationContext. It is registered to Servlet Container -->
      <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
      </listener>
      <listener>
        <listener-class>
            org.springframework.web.context.request.RequestContextListener
        </listener-class>
      </listener>

Y la inyección del Bean en el BackingBean quedaría:


@ManagedProperty(value = "#{clienteService}")
ClienteService clienteService;

public void setClienteService(ClienteService clienteService) {
this.clienteService = clienteService;
}

Tampoco debemos olvidar en el Pom las librerías de Spring:


<!-- Spring 3 dependencies -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>

Anuncios