Hola Mundo JSF 2.0

En esta entrega vamos realizar una primera aplicación con Java Server Faces utilizando facelets. Tengo la intención de ir ampliando este proyecto, metiendo funcionalidades nuevas en cada entrega. Como siempre utilizo maven y eclipse. En las primeras entregas utilizaré tomcat para desplegar pero posiblemente en las siguientes me pase a geronimo o glassfish. Como novedad es que pienso subir los proyectos maven y un pdf con capturas. Soy consciente de que alguna ver me dejo algún detalle que puede ser relevante ya que en estas entradas del blog intento ser superconciso.

El entorno va a ser el jdk 1.6.0_30,  Eclipse Indigo SR2, maven3, los servidores antes citados. En el eclipse vamos a instalar, a través del market, plugins de maven, jbosstools, subversive, con el conector SVN kit 1,7. Este último plugin no es necesario, pero no debería interferir en nada en las explicaciones,
Se configuran las variables de entorno para que apunten la máquina virtual señalada y a la carpeta de maven, M2_HOME y en el path se mete tanto maven como la MVJ.
 En el eclipse.ini se indica dónde están los binarios de la mv. Primeras lineas de eclipse ini:

-vm
C:/Archivos de programa/Java/jdk1.6.0_30/bin
-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502


Como siempre desde linea de comandos vamos a generar el proyecto. Para ello vamos a partir de la implementación libre de JSF.
Escribimos mvn archetype:generate

C:\Documents and Settings\Administrador\workspace>mvn archetype:generate
Una vez que nos lista todos los arquetipos disponibles. En el momento de realizar el proyecto son unos 600

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : webap

Filtro por webap y selecciono el que me indica un proyecto de j2ee 1.6.

El proyecto elegido es lo de menos, lo que quiero es el esqueleto de una aplicación web que me haga el trabajo más cómodo para no empezar desde "0".Ahora importo el proyecto desde el eclipse para poder editarlo de forma más cómoda.

En este caso me indica que existe un problema en el pom con un plugin. La idea era tener un proyecto base y el proyecto generado apenas tiene más que la estructura que necesitamos. Por tanto vamos a eliminar ese plugin para que desaparezca el problema, si lo necesitamos ya lo incorporaremos de nuevo. Realmente vamos a eliminar muchas más cosas del proyecto.  Ahora lo que necesitamos es un proyecto estructuralmente correcto.

Vamos por empezar a crear una carpeta de “resources”. Creo que la forma más sencilla es desde el “Proyect Explorer” haciendo click con el botón derecho y “New”.

Esto nos lleva hasta una pantalla en la que le indicamos la carpeta con la ruta.
“src/main/resources”.
Despues en la carpeta “webapp” vamos a crear la carpeta “WEB-INF”, en la cual colocaremos el descriptor de despliegue y el archivo de configuración de jsf.
El archivo web.xml tendrá lo básico:

<?xml version='1.0' encoding='UTF-8'?>

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <display-name>firstjsf</display-name>
    <description>Aplicacion JSF</description>

    <context-param>
        <description>
          Proyecto en fase de desarrollo
        </description>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>

    <!-- Faces Servlet -->
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>

</web-app>

Vamos a meter en la carpeta WEB-INF el archivo de configuracion del servlet. El archivo se llama “faces-config.xml” y lo voy a añadir con el contenido básico

faces-config.xml:

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
</faces-config>

Si recapitulamos lo hecho hasta ahora necesitamos el servlet y la página de inicio. Ambos los hemos definido en el web.xml.
El servlet, la librería que lo contiene, podemos obtenerlo con maven añadiéndolo como dependencia.

El pom añadimos las dependencias
                     <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.0.2-b10</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.0.2-b10</version>
            <scope>compile</scope>
        </dependency>
   
Y por comodidad añado el plugin para desplegar en el tomcat, en el apartado build, desde el propio eclipse con el goal “tomcat:deploy”

                <groupId>org.codehaus.mojo</groupId>
                <artifactId>tomcat-maven-plugin</artifactId>
                <configuration>
                    <server>winxpwork</server>
                    <username>tomcat</username>
                    <password>tomcat</password>
                    <url>http://192.168.2.55:8080/manager/html</url>
                </configuration>
           
Solo queda por escribir el index.xhtml que le hemos indicado como página de inicio en el web.xml. Eliminamos el index.jsp del proyecto y lo sustituimos por el “index.xtml”.
El contenido de este primer facelet, el index.xtml, será el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">
<h:head>
    <title>Hola Mundo JSF</title>
</h:head>
<h:body>
    <h3>
        <h:outputFormat value="Hola Mundo Facelets">
        </h:outputFormat>
    </h3>
</h:body>
</html>

Para desplegarlo en el tomcat y comprobar que todo ha ido correctamente ejecuto "clean package tomcat:deploy".

Ya está todo hecho, al desplegar al aplicación lo que deberíamos ver es una página que me muestra "Hola Mundo Facelets"
Ya tenemos nuestra primera aplicación con Java Server Faces !!!

El proyecto en  JSF1.0  y este mini tutorial en pdf.

Sobre este mismo proyecto añadiendo internacionalización y logs, en esta entrada  . Añadiendo el uso de plantillas aquí y si además te interesa añadirle la funcionalidad de carga de archivos, esta es la entrada

Comentarios