domingo, 24 de junio de 2012

J2ee + Primefaces + GlassFish

Intentando liquidar con el proyecto final del curso de J2ee, resolví usar Primefaces para solucionar la parte gráfica.

Existen varios tutoriales, incluso en el PrimeFace ShowCase se muestra como es fácil integrar una aplicación j2ee con los jars empaquetados que distribuye esta gente. Mentira

Varias cosas a tener en cuenta cuando estás en el nivel "muy amateur":

Skins o Themes: dependiendo de la versión que tengas disponible y la alineación de los planetas en el cosmos, se refieren a lo mismo de forma indistinta.
Existe la posibilidad de importar los .jars con los themes, pero lo que finalmente me resultó fue descomprimir el .jar y tirar la carpeta images y el .css para adentro del proyecto, y en cada .xhtml agergar el tag;

        <h:head>
           <link type="text/css" rel="stylesheet" href="theme.css"/>
        </h:head>

Con eso deberíamos poder instalar cualquier tema del repositorio.

faces-config.xmlSi bien la nueva especificación del estándar están las notaciones como "@ManagedBean(value="myBean")@SessionScoped", no pude safar de crearlo y especificarlos en el mismo, por ejemplo;

   <managed-bean>
       <managed-bean-name>fileUploadController</managed-bean-name>
       <managed-bean-class>FileUploadController</managed-bean-class>
       <managed-bean-scope>session</managed-bean-scope>
   </managed-bean>

FileUpload Auto: Después de que el proyecto estaba configurado, necesitaba un control para manejo de archivos. Intenté probar con el FileUploadAuto, y no me funcionaba, pero tampoco me daba ningún error. Así que cambié a FileUploadSimple, que me tiró una muy linda Exception y me di cuenta que era lo que estaba pasando.

Primero: Estos controles usan unas bibiliotecas de apache (common-io y el commons-fileupload).
Estos jars hay que importarlos al proyecto e indicar que los empaquete dentro de /WEB-INF/lib.

Segundo: Si compila todo, pero no se logra hacer el deploy, hay copiar esos jars en toda carpeta /lib que se encuentre dentro del GlassFish.

Tercero: Agregar los siguientes tags en el web.xml

<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

Con eso y agregando los Backing Beans que sean necesarios, debería funcionar.