Qué espacio de nombres XML usar con JSF 2.2

He migrado mi aplicación de JSF 1.2 a 2.2.

Utilizó espacios de nombres XML en el dominio java.sun.com como xmlns:f="http://java.sun.com/jsf/core" . Sin embargo, el tutorial Java EE 7 de Oracle está utilizando espacios de nombres XML en el dominio xmlns.jcp.org como xmlns:f="http://xmlns.jcp.org/jsf/core" .

¿Cuál es el recomendado y por qué se modificó?

¿Cuál se recomienda?

xmlns.jcp.org con los espacios de nombres XML en el dominio xmlns.jcp.org . Esto se introdujo recientemente desde Java EE 7 en 2013 (que abarca ao JSF 2.2, Servlet 3.1, CDI 1.1, etc.). Tenga en cuenta que esto no solo afecta a los archivos Facelets, sino también a los archivos de configuración XML como faces-config.xml , web.xml , beans.xml , etc.

Los antiguos espacios de nombres XML en java.sun.com todavía existen para la compatibilidad con versiones anteriores, pero el soporte eventualmente desaparecerá en una futura versión de Java EE. Debe migrar su base de código tan pronto como pueda. Debería ser una tarea trivial usar la función “buscar y reemplazar en todos los archivos” que ofrece el IDE promedio.

Solo las versiones anteriores de Mojarra 2.2.0 / 2.2.1 han tenido errores relacionados con los cambios del espacio de nombres XML, pero no deberían manifestarse en las versiones más recientes. Ver también ao

  • El uso del nuevo espacio de nombres xmlns.jcp.org en los compuestos causa java.lang.NullPointerException en java.util.concurrent.ConcurrentHashMap.putIfAbsent
  • f: viewParam no pasa el parámetro requerido cuando se usa el nuevo espacio de nombres xmlns.jcp.org
  • El componente de metadatos debe estar nested dentro de una etiqueta de metadatos. Sugerencia: encierre los componentes necesarios dentro de

y por qué fue cambiado esto?

Debido a que Java ya no es de Sun desde 2010. Tenga en cuenta que fueron inteligentes para no hacerlo java.oracle.com o algo apretado junto con la empresa propietaria actual. Ahora está vinculado de forma agradable e independiente con el JCP ( Java Community Process ), el único responsable de administrar las especificaciones de Java (EE).

Hice un breve resumen de todos los nuevos espacios de nombres oficiales del oracle:

 < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">    

Lo uso como plantilla para todos mis archivos .xhtml . Los detalles se pueden encontrar en la biblioteca oficial de tags faciales: JavaServer Faces 2.2 Facelets Tag Library Documentation

Espero que esto ayude 🙂

Para futuros visitantes que tengan confusión / problema en el espacio de nombres:

Me gustaría destacar la forma general de averiguar qué espacio de nombres usar:

  • Si desea utilizar tags de la biblioteca de tags HTML JSF o de la biblioteca de tags core JSF, abra el archivo JAR de implementación JSF (como Oracle Mojarra, Apache MyFaces myfaces-impl-2.3.1.jar ) y encuentre los archivos .tld o .xml la biblioteca de tags. archivo (lo puede encontrar en el directorio META-INF ) y use el espacio de nombres mencionado allí.
  • Si desea utilizar RichFaces o PrimeFaces, abra su JAR de implementación (como richfaces-components-ui-4.0.0.Final.jar , o primefaces-6.2.jar ) y haga lo mismo que arriba.

Si la implementación tiene .tld (como rich.tld ), entonces puede usar el valor del elemento por ejemplo http://richfaces.org/rich . Y si la implementación tiene .xml (como rich.taglib.xml ), entonces puede usar el valor del elemento por ejemplo http://richfaces.org/rich

Lo que he mencionado anteriormente está estrictamente relacionado con JSF, pero también es válido en general. La clave es que si usa el espacio de nombres del JAR de implementación, nunca se encontrará con problemas.