jsf facelets jsf-2.2 xml-namespaces java-ee-7

Qué espacio de nombres XML usar con JSF 2.2 y versiones posteriores



facelets jsf-2.2 (3)

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

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

¿Cuál se recomienda y por qué se cambió esto?


¿Cuál es el recomendado?

xmlns.jcp.org con espacios de nombres XML en el dominio xmlns.jcp.org . Esto se introdujo recientemente desde Java EE 7 en 2013 (que cubre 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 están allí para la compatibilidad con versiones anteriores, pero el soporte eventualmente desaparecerá en una futura versión de Java EE. Debería migrar su código base tan pronto como sea posible. Debería ser una tarea trivial utilizando 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 en el espacio de nombres XML, pero estos no deberían manifestarse en las versiones más nuevas. Ver también ao

¿Y por qué se cambió esto?

Debido a que Java ya no es de Sun desde 2010. Tenga en cuenta que fueron inteligentes para no convertirlo en java.oracle.com o algo estrechamente relacionado con la compañía propietaria actual. Ahora está bien e independientemente vinculado al JCP ( Proceso de la Comunidad Java ), el realmente responsable de administrar las especificaciones Java (EE).


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

<!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://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:c="http://xmlns.jcp.org/jsp/jstl/core" xmlns:p="http://xmlns.jcp.org/jsf/passthrough" xmlns:cc="http://xmlns.jcp.org/jsf/composite" xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions" xmlns:jsf="http://xmlns.jcp.org/jsf"> <!-- Content here --> </html>

Lo uso como plantilla para todos mis archivos .xhtml . Los detalles se pueden encontrar en la biblioteca oficial de etiquetas de facelet: JavaServer Faces 2.2 Documentación de la biblioteca de etiquetas de Facelets

Espero que esto ayude :)


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

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

  • Si desea utilizar etiquetas de la biblioteca de etiquetas HTML JSF o la biblioteca de etiquetas centrales JSF, abra el JAR de implementación JSF (como Oracle Mojarra, Apache MyFaces- myfaces-impl-2.3.1.jar ) y busque el archivo .tld o .xml la biblioteca de etiquetas. (puede encontrarlo en el directorio META-INF ) y usar 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 antes.

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

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