Traducir Blog

jueves, noviembre 05, 2009

Beans JSF Manejados por el contexto de Spring

La forma común en la cual se inyectan los Beans Manejados de JSF es por medio del fichero de configuración faces-config.xml, esto es conocido por cualquier programador de JSF con un nivel básico de conocimientos en el tema,
sin embargo, lo mas común en una aplicación J2EE es tener un conjunto de modulos independientes como por ejemplo modulos de negocio con Spring, Ejb, persistencia con JPA, Hibernate, iBatis, TopLink, etc.
En este punto ocurre algo de lo cual se ha mencionado en la entrada anterior, y es el tema de la Inyección de Dependencias, efectivamente cuado inyectamos un Managed Bean de JSF estamos haciendo uso de un contenedor JSF para el almacenamiento y recuperación de objetos destinado para los Managed Beans, luego, en capas de negocio encontramos que Spring o EJB tambien necesita realizar inyección de dependecias de sus recursos (Tipicamente Beans en el caso concreto de Spring), Sin embargo es aquí, cuando podriamos preguntarnos ¿Y para que necesito 2 contenedores para realizar la inyección de dependecias de los recursos de la aplicación? probablemente esta misma pregunta se han formulado los desarrolladores de Spring, por lo tanto desde la versión 2.0 es posible expandir el soporte de JSF que tiene Spring para que los Beans sean manejados por la implementación del BeanResolver propio de Spring.Para ilustrar esto de un modo practico, indico los siguientes pasos:
Se asume que se cuenta con una configuración de Spring y JSF instalados correctamente con todas las librerias necesarias, posteriormente, se deberan insertar las siguientes lineas en el faces-config:

<?xml version="1.0"
!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">;
faces-config>
<application>
variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>
</application>
</faces-config>


De este modo le decimos a JSF que la forma en la cual el Expression Lenguage resolvera los beans que se referencien en las paginas, ahora bien para probarlo, basta con crear un Bean de Spring en el fichero de configuración de Spring, (por nómenclatura se nombra applicationContext.xml, pero es igual, como lo llames)

Despues de esto lo unico que debemos hacer es crear el Bean de Spring con un contenido como este:

package testingspring;

public class TestingBeanJSF {
private String mensajeTexto="Bean Manejado de Spring";
public void setMensajeTexto(String mensajeTexto) {
this.mensajeTexto = mensajeTexto;
}
public String getMensajeTexto() {
return mensajeTexto;}
}



Finalmente, adicionamos el bean de la siguiente forma en el fichero de configuración:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<bean id="testing" class="testingspring.TestingBeanJSF" />
</beans>




Como podemos comprobar en el fichero faces-config, no exite ningun bean manejado, para probarlo podemos tener una pagina como esta:

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<f:view>
<h:form>
<h:outputText value="#{testing.mensajeTexto}"/>
</h:form>



Con esto Bastara para probar, espero que esta entrada simple sea de utilidad.

Jdaanial.


[+/-] Continuar leyendo...

No hay comentarios: