====== 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:
- Primero tenemos que realizar la [[migraciones:fdw2_wls_121_to_wls_122|Migración de Aplicaciones FundeWeb 2.0 de Weblogic 12.1 a 12.2]].
- En el POM principal, cambiamos la versión del //// a //[2.0.100, 2.0.199]// [[https://archiva.um.es/archiva/repository/FundeWeb/es/um/atica/fundeweb/parent/|Parents para aplicaciones FundeWeb 2.0]].
es.um.atica.fundeweb
parent
[2.0.100, 2.0.199]
- En la sección de //// añadimos (o sustituimos si ya existen):[8.0, 8.0.99]
[8.0, 8.0.99]
[1.9.0, 1.9.9]
[2.8.5, 2.8.99]
[4.1.1, 4.1.99]
3.1.0
[2.0.6, 2.0.99]
- En el POM del módulo Web, hay que modificar la dependencia **//rome//**, cambiando su //// a **//com.rometools//**. Quedando:
com.rometools
rome
- También hay que modificar la dependencia **//jdom//**, cambiando su //// a **//jdom2//**. Quedando:
org.jdom
jdom2
- Ahora, añadimos las siguiente dependencias en el bloque de PrimeFaces -- (justo antes del comentario **//FIN - Primefaces//**):
com.googlecode.owasp-java-html-sanitizer
owasp-java-html-sanitizer
com.google.guava
guava
com.googlecode.libphonenumber
libphonenumber
org.apache.commons
commons-collections4
org.apache.commons
commons-math3
- Ahora, tenemos que sustituir en la dependencia con artifactId **//fundeweb-tags//**, el artifactId por **//fundeweb-tags-primefaces8//**:
es.um.atica.fundeweb
fundeweb-tags-primefaces8
- Realizar las guias de migración:\\ [[https://primefaces.github.io/primefaces/8_0/#/../migrationguide/6_0|PrimeFaces Migration Guide from 5.3 to 6.0]] (Si estamos con PrimeFaces 5.3) \\ [[https://primefaces.github.io/primefaces/8_0/#/../migrationguide/6_1|PrimeFaces Migration Guide from 6.0 to 6.1]] (Si estamos con PrimeFaces 5.3) \\ [[https://primefaces.github.io/primefaces/8_0/#/../migrationguide/6_2|PrimeFaces Migration Guide from 6.1 to 6.2]]\\ [[https://primefaces.github.io/primefaces/8_0/#/../migrationguide/7_0|PrimeFaces Migration Guide from 6.2 to 7.0]].\\ [[https://primefaces.github.io/primefaces/8_0/#/../migrationguide/8_0|PrimeFaces Migration Guide from 7.0 to 8.0]]
- 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//**.
- 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:
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 [[https://svn.um.es/svn/SEAM/fundeweb-librerias/Proyectos/fuentes/primefaces-7-0/primefaces-fix/scheduler | 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í
Una vez realizado los cambios ya no debería saltar el panel de bloqueo cada vez que se actualice el calendario.
----
--- //[[juanmiguel.bernal@ticarum.es|JUAN MIGUEL BERNAL GONZALEZ]] 13/12/2019 08:42//