passthrough librerias etiquetas ejemplo define componentes html5 jsf jsf-2 xhtml facelets

html5 - librerias - ¿Es posible usar JSF+Facelets con HTML 4/5?



ui define jsf (5)

En una nota relacionada, consulte este artículo de IBM developerWorks: JSF 2 fu: componentes compuestos HTML5, Parte 1

Facelets se basa en espacios de nombres XML para trabajar con XHTML. ¿Cómo es HTML 4? Y, hasta donde yo sé, HTML 5 no admite espacios de nombres. Además, HTML 5 tiene algunos elementos nuevos que no están disponibles en XHTML. Incluso HTML 4 y XHTML tienen algunas diferencias con respecto a los elementos y atributos que admiten.

La pregunta es: ¿es posible renderizar documentos HTML 4/5 usando Facelets? ¿Si es así, cómo?


He leído que esto debería ser posible, pero aún no lo hice. Tal vez deberías usar HTML 5 dentro del código envoltorio xHTML. Veré, si puedo encontrar la fuente si la información que tengo de nuevo.

[EDITAR] Parece que ha habido algo de trabajo en MyFaces para admitir la representación de HTML5 durante el verano de código de Goole. No sé si debería usarse de forma productiva, aún.

Por favor, danos tu opinión, si la haces funcionar. [/EDITAR]



http://wiki.whatwg.org/wiki/HTML_vs._XHTML contiene información útil sobre cómo se pueden usar los espacios de nombres en HTML5 para ayudar a la migración desde XHTML. ¿Quizás puedas intentar aplicar el espacio de nombres como sugiere y ver qué ocurre?


Dado que Facelets es una tecnología de visualización basada en XML que come y emite en esencia el marcado XML, no puede usarlo con un doctype HTML4. El doctype HTML4 describe varios elementos que no pueden cerrarse automáticamente, como <link> , <meta> , <br> y <hr> . Sin embargo, con XML se ve obligado a cerrarlos como <link/> , <meta/> , etc. Por lo tanto, usar un doctype HTML4 no es una opción para Facelets (es decir, cuando se respetan los estándares y / o se teme el el validador w3, sin embargo, funcionará perfectamente en la mayoría de los navegadores web, si no en todos).

HTML5, por otro lado, permite el marcado XML. Esto se especifica en el capítulo 3.2.2 - Elementos :

Ejemplo:

<link type="text/css" href="style.css"/>

Los autores también pueden optar por utilizar esta misma sintaxis para elementos vacíos en la sintaxis HTML. Algunos autores también eligen incluir espacios en blanco antes de la barra inclinada, sin embargo, esto no es necesario. (El uso de espacios en blanco de esa manera es una convención heredada de las pautas de compatibilidad en XHTML 1.0, Apéndice C.)

Yo mismo uso <!DOCTYPE html> todo el tiempo, también con JSF / Facelets, incluso sin una declaración <?xml?> En la parte superior de la página. Funciona perfectamente en todos los navegadores. Con un doctype XHTML deberías, de acuerdo con las especificaciones, usar un Content-Type de application/xhtml+xml que solo haría que MSIE se ahogue (no lo comprende). Y dado que sigue siendo uno de los navegadores más utilizados ... Reemplazar el tipo de contenido XHTML por text/html se considera dañino , usted tampoco quiere hacer esto.

Según sus argumentos:

HTML 5 no admite espacios de nombres.

Esto no importa Los espacios de nombres solo son de interés para la tecnología de vista lateral del servidor basada en XML (como Facelets) que a su vez puede generar HTML puro con esas etiquetas. El siguiente ejemplo es legítimamente válido para Facelets:

<!DOCTYPE html> <html lang="en" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:h="http://xmlns.jcp.org/jsf/html"> <h:head> <title>Title</title> </h:head> <h:body> <h:outputText value="#{bean.text}" /> </h:body> </html>

Esto hace que HTML5 legítimamente válido (para el lado del cliente):

<!DOCTYPE html> <html lang="en"> <head> <title>Title</title> </head> <body> Some text </body> </html>

Verá, Facelets ya elimina las declaraciones XHTML ya que no tienen ningún significado en el lado del cliente.

Y,

También HTML 5 tiene algunos elementos nuevos que no están disponibles en XHTML

esto tampoco tiene sentido. Se trata de la salida generada. Que puede ser HTML5 como bueno. Su único problema puede ser el soporte del navegador y la disponibilidad de componentes JSF de terceros que rinden elementos HTML5 específicos. Desde JSF 2.2, es posible usar la nueva característica de elementos de paso a paso para convertir elementos personalizados en un componente JSF. Simplemente, otorgue al elemento HTML5 un atributo jsf:id . Se interpretará de forma transparente internamente como una instancia de UIPanel en el árbol de componentes JSF (como <h:panelGroup> ).

<!DOCTYPE html> <html lang="en" xmlns:jsf="http://xmlns.jcp.org/jsf" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:h="http://xmlns.jcp.org/jsf/html" > <h:head> <title>Title</title> </h:head> <h:body> <header jsf:id="header">Header</header> <nav jsf:id="nav">Nav</nav> <main jsf:id="main">Main</main> <footer jsf:id="footer">Footer</footer> </h:body> </html>

Incluso puede hacer referencia a él desde ajax como en <f:ajax render="main"> .

En realidad, XHTML está sobrevalorado. Su única intención es facilitar el desarrollo de HTML utilizando herramientas basadas en XML que pueden manipular / transformar / generar páginas HTML en el lado del servidor (como Facelets). Pero algunos principiantes también lo usan sin usar ninguna herramienta XML y lo muestran como está, porque es "genial", por alguna razón poco clara.

No me malinterpretes XHTML es excelente como tecnología de vista lateral del servidor. Pero simplemente no como tecnología de marcado del lado del cliente. No tiene absolutamente ningún valor en el lado del cliente.

Ver también: