Tabla de Contenidos

Migración de PrimeFaces 6.1 a 8.0

Solo para aplicaciones FundeWeb 2.0 que estan siendo desarrolladas o mantenidas en el IDE de FundeWeb 2.1.

Para poder realizar la migración a PrimeFaces 8.0, tenemos que realizar los siguientes pasos:

  1. En el POM principal, cambiamos la versión del <parent> a [2.0.100, 2.0.199] Parents para aplicaciones FundeWeb 2.0.
    <parent>
    	<groupId>es.um.atica.fundeweb</groupId>
    	<artifactId>parent</artifactId>
    	<version>[2.0.100, 2.0.199]</version>
    </parent>
  2. En la sección de <properties> añadimos (o sustituimos si ya existen):
    <primefaces.version>[8.0, 8.0.99]</primefaces.version>
    <primefaces.extensions.version>[8.0, 8.0.99]</primefaces.extensions.version>
    <rome.version>[1.9.0, 1.9.9]</rome.version>
    <gson.version>[2.8.5, 2.8.99]</gson.version>
    <poi.version>[4.1.1, 4.1.99]</poi.version>
    <xmlbeans.version>3.1.0</xmlbeans.version>
    <jdom.version>[2.0.6, 2.0.99]</jdom.version>
  3. En el POM del módulo Web, hay que modificar la dependencia rome, cambiando su <gruopId> a com.rometools. Quedando:
    <dependency>
    	<groupId>com.rometools</groupId>
    	<artifactId>rome</artifactId>
    </dependency>
  4. También hay que modificar la dependencia jdom, cambiando su <artifactId> a jdom2. Quedando:
    <dependency>
    	<groupId>org.jdom</groupId>
    	<artifactId>jdom2</artifactId>
    </dependency>
  5. Ahora, añadimos las siguiente dependencias en el bloque de PrimeFaces – (justo antes del comentario FIN - Primefaces):
    <dependency>
    	<groupId>com.googlecode.owasp-java-html-sanitizer</groupId>
    	<artifactId>owasp-java-html-sanitizer</artifactId>
    </dependency>
     
    <dependency>
    	<groupId>com.google.guava</groupId>
    	<artifactId>guava</artifactId>
    </dependency>
     
    <dependency>
    	<groupId>com.googlecode.libphonenumber</groupId>
    	<artifactId>libphonenumber</artifactId>
    </dependency>
     
    <dependency>
    	<groupId>org.apache.commons</groupId>
    	<artifactId>commons-collections4</artifactId>
    </dependency>
     
    <dependency>
    	<groupId>org.apache.commons</groupId>
    	<artifactId>commons-math3</artifactId>
    </dependency>
    <!-- FIN - Primefaces -->
  6. Ahora, tenemos que sustituir en la dependencia con artifactId fundeweb-tags, el artifactId por fundeweb-tags-primefaces8:
    <dependency>
    	<groupId>es.um.atica.fundeweb</groupId>
    	<artifactId>fundeweb-tags-primefaces8</artifactId>
    </dependency>
  7. En la migracion de PrimeFaces 6.2 a 7.0 se indica que hay que dejar de usar la clase RequestContext, que desaparecera en PrimeFaces 8. Hemos añadido la clase PrimeFacesHelper para compatibilizar el paso, tiene los mismo métodos para ayudar al cambio. Para utilizarse se añade PrimeFacesHelper.instance() y usar el mismo método de RequestContext.
  8. Si en alguna página XHTML o fichero Javascript, tenemos una llamada a la función updateToggles, ya no es necesaria y hay que quitarla. Ejemplo de lo no necesario:
    <p:ajax event="sort" oncomplete="updateToggles('ColumToggler')" />
    <p:ajax event="page" oncomplete="updateToggles('ColumToggler')" />
    <p:ajax event="filter" oncomplete="updateToggles('ColumToggler');" />

Antes de desplegar en los servidores de los entornos de: desarrollo, sistemas y producción; hay que poner un JIRA a DJ-AT-MIDDLEWARE para indicar el cambio de las librerías de la aplicación, a las librerías 2.0.2, y debe ser un cambio sincronizado con ellos sobre cada entorno a actualizar.

FAQ

El componente p:schedule muestra el panel de bloqueo al cargar

Si con la versión anterior de primefaces no te salía el panel del bloqueo y ahora con Primefaces 7 sí te sale se debe a unos cambios que se han hecho en el componente para optimizar su carga.

Ahora en vez de cargarse todo el calendario en una petición, se pinta la estructura y posteriormente mediante llamadas javascript ( PF('miSchedule').update()) se carga el contenido. Esto provoca que no se pueda controlar correctamente cuando aparece o no el panel de bloqueo y que poner el atributo global=“false no funcione.

Para solucionar este problema el componente primefaces nos da un atributo extender que permite sobrescribir el comportamiento del componente fullcalendar que es el que realmente muestra la agenda.

Para ello debemos incorporar a nuestro proyecto el fichero schedule_fix.js dentro de la carpeta src/main/webapp/resources/js

Una vez incluida la librería deberemos ir a nuestro componente calendario y en la propiedad extender añadir initSchedule quedando así

<p:schedule id="schedule1" value="#{manejadorHome.lazyEventModel}" widgetVar="myschedule1" extender="initSchedule"></p:schedule>

Una vez realizado los cambios ya no debería saltar el panel de bloqueo cada vez que se actualice el calendario.


JUAN MIGUEL BERNAL GONZALEZ 13/12/2019 08:42