Java Server Faces I

Bueno, qué cuernos es JSF…

la verdad todavía no lo entiendo, pero vamos a ver qué onda. Por lo poco que vi y haciendo el ejemplo a continuación, no le veo, todavía grandes ventajas al uso de Spring con JSTL y EL expressions… incluso JSF por lo que vi tiene un motor de EL pero en lugar de declararse usando el ${} se hace con #{}.

Bueno, mi entorno es.
eclipse Version: 3.2.0 Build id: M20060629-1905
Apache Tomcat/5.5.17 (no uso el 5.5.20 porque aparentemente tiene un bug y no funciona bien el plugin de eclipse para levantarlo)
Apache MyFaces 1.1.4

Lo anterior es lo básico… ahora, para ambiente de desarrollo web, infaltable, el plugin de sysdeo para subir/bajar/reiniciar el tomcat. Instalar este es fácil, solo lo bajan, lo tiran en la carpeta plugins del eclipse (o de donde tengan apuntados sus plugins) y listo, despues, para usar el devLoader (que les permite cargar librerías externas a sus proyectos evitándose meter todo en WEB-INF/lib de entrada o, peor aún, tirarlas en common/lib del tomcat) descomprimen el devloader.zip, que viene dentro del zip del plugin de sysdeo, en $TOMCAT_HOME/server/classes. Lo único que no hay que olvidarse es, cuando uno agrega una librería al build path, tiene que agregarla a mano en el DevLoader en las propiedades del proyecto porque sino tira las molestas NoClassDefFoundError al levantar el tomcat (bueno, basta que no es la idea de hablar del tomcat).

El tutorial en cuestion es http://www-128.ibm.com/developerworks/java/library/j-jsf1/

No lo voy a explicar de nuevo, solo acotar cosas con las que lidié

  • En el web.xml hay que agregar las taglib que vamos a usar:
    <taglib>
    <taglib-uri>/jsf/html</taglib-uri>
    <taglib-location>/WEB-INF/tld/myfaces_html.tld</taglib-location>
    </taglib>
    <taglib>
    <taglib-uri>/jsf/core</taglib-uri>
    <taglib-location>/WEB-INF/tld/myfaces_core.tld</taglib-location>
    </taglib>

    y los tld los sacamos del myfaces-impl-1.1.4.jar de la carpeta META-INF (no tengo idea de por qué estas están acá)

  • Y en los JSP poner
    <%@ taglib uri="/jsf/html" prefix="h" %>
    <%@ taglib uri="/jsf/core" prefix="f" %>

El resto sale todo andando como está ahí. Las dependencias, entonces de mi proyecto fueron

  • commons-beanutils-1.7.0.jar
  • commons-collections-3.1.jar
  • commons-digester-1.6.jar
  • commons-lang-2.1.jar
  • myfaces-api-1.1.4.jar
  • myfaces-impl-1.1.4.jar

Como conclusión, por ahora, solo veo que no hay un controller como hay en otros frameworks MVC (Struts, Spring), es más parecido a Tapestry en ese sentido, solo que la navegabilidad está dada por el faces-config.xml. En principio no me gusta que el método de interacción termina siendo tambien uno medio intermedio, que si bien no es un controller con todas las letras (me refiero a que no tiene acceso al request y al response, pero esta es una mera ‘definición’ mía :P), casi, y los métodos llamados tienen que devolver Strings U_U no se, lógico que en algún lado hay que hacer el corte, y probablemente sea la mejor solución, solo que sigue sin convencerme.

Seguiremos investigando :P

Advertisements

2 Responses

  1. Lo hago como tú, y el eclipse me da el siguiente error:cvc-complex-type.2.4.a: Invalid content was found starting with element ‘taglib’. One of ‘{“http://java.sun.com/xml/ns/j2ee”:description, “http://java.sun.com/xml/ns/j2ee”:display-name, “http://java.sun.com/xml/ns/j2ee”:icon, “http://java.sun.com/xml/ns/j2ee”:distributable, “http://java.sun.com/xml/ns/j2ee”:context-param, “http://java.sun.com/xml/ns/j2ee”:filter, “http://java.sun.com/xml/ns/j2ee”:filter-mapping, “http://java.sun.com/xml/ns/j2ee”:listener, “http://java.sun.com/xml/ns/j2ee”:servlet, “http://java.sun.com/xml/ns/j2ee”:servlet-mapping, “http://java.sun.com/xml/ns/j2ee”:session-config, “http://java.sun.com/xml/ns/j2ee”:mime-mapping, “http://java.sun.com/xml/ns/j2ee”:welcome-file-list, “http://java.sun.com/xml/ns/j2ee”:error-page, “http://java.sun.com/xml/ns/j2ee”:jsp-config, “http://java.sun.com/xml/ns/j2ee”:security-constraint, “http://java.sun.com/xml/ns/j2ee”:login-config, “http://java.sun.com/xml/ns/j2ee”:security-role, “http://java.sun.com/xml/ns/j2ee”:env-entry, “http://java.sun.com/xml/ns/j2ee”:ejb-ref, “http://java.sun.com/xml/ns/j2ee”:ejb-local-ref, “http://java.sun.com/xml/ns/j2ee”:service-ref, “http://java.sun.com/xml/ns/j2ee”:resource-ref, “http://java.sun.com/xml/ns/j2ee”:resource-env-ref, “http://java.sun.com/xml/ns/j2ee”:message-destination-ref, “http://java.sun.com/xml/ns/j2ee”:message-destination, “http://java.sun.com/xml/ns/j2ee”:locale-encoding-mapping-list}’ is expected.Tienes idea de qué puede ser??Gracias y un saludo.

  2. Hola, muy buen tutorial!Acá encontré uno que puedes sacar info, parecería estar bien explicado.http://www.runit.com.ar/pg/pages/view/1103/Saludos!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s