Est-il possible d'utiliser JSF+Facelets avec HTML 4/5?

Facelets s'appuie sur des espaces de noms XML pour fonctionner avec XHTML. Comment sont HTML 4, et pour autant que je sache, HTML 5 ne supporte pas les namespaces. Aussi HTML 5 a quelques nouveaux éléments qui ne sont pas disponibles en XHTML. Même HTML 4 et XHTML ont quelques différences en ce qui concerne les éléments et les attributs qu'ils supportent.

la question Est: est-il possible de rendre des documents HTML 4/5 en utilisant des Facelets? Si oui, comment?

65
demandé sur BalusC 2010-05-29 20:19:27

5 réponses

étant donné que Facelets est une technologie de vue basée sur XML qui mange et émet essentiellement du balisage XML, vous ne pouvez pas l'utiliser avec un doctype HTML4. Le doctype HTML4 décrit plusieurs éléments qui ne peuvent pas se fermer automatiquement, comme <link> , <meta> , <br> et <hr> . Cependant, avec XML vous êtes forcé de les fermer comme <link/> , <meta/> , etc. Ainsi, l'utilisation d'un doctype HTML4 n'est absolument pas une option pour les Facelets (c'est-à-dire, lorsque vous respectez les normes et/ou craignez W3 validator, il fonctionnera cependant parfaitement sur le plus si pas tous les webbrowsers).

HTML5, par contre, autorise le balisage XML. Cela est spécifié dans chapitre 3.2.2-éléments :

exemple:

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

les auteurs peuvent éventuellement choisir d'utiliser cette même syntaxe pour les éléments nuls dans la syntaxe HTML. Certains auteurs choisissent également d'inclure des espaces avant la barre oblique, cependant, ce n'est pas nécessaire. (L'utilisation de whitespace de cette façon est une convention héritée des directives de compatibilité dans XHTML 1.0, Annexe C.)

j'utilise moi-même <!DOCTYPE html> tout le chemin, aussi avec JSF/Facelets, même sans une <?xml?> déclaration en haut de la page. Il fonctionne parfaitement dans tous les navigateurs. Avec un doctype XHTML vous devriez selon la spécification être en utilisant un Content-Type de application/xhtml+xml qui ne ferait MSIE à étouffer (il n'a pas le comprendre). Et puisque c'est encore l'un des navigateurs les plus couramment utilisés... Remplacer le type de contenu XHTML par text/html est considéré comme nuisible , vous ne voulez pas non plus faire cela.

selon vos arguments:

HTML 5 ne supporte pas les espaces de noms.

ça n'a pas d'importance. Les espaces de noms ne sont intéressants que pour le XML basé la technologie de vue côté serveur (comme les Facelets) qui à son tour peut générer du HTML pur avec ces tags. L'exemple suivant est légitimement valable pour les 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>

ceci rend légitimement valide HTML5 (côté client):

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

vous voyez, les Facelets suppriment déjà les déclarations XHTML puisqu'elles n'ont pas de sens du côté client.

et,

aussi HTML 5 a de nouveaux éléments qui ne sont pas disponibles en XHTML

cela n'a pas non plus de sens. Il est tout au sujet de la sortie générée. Qui peut être HTML5 aussi bien. Votre seul problème peut être le support du navigateur et la disponibilité de composants JSF tiers qui rend les éléments spécifiques HTML5. Depuis JSF 2.2, il est possible d'utiliser la nouvelle fonction passthrough elements pour transformer des éléments personnalisés en JSF composant. Il suffit de donner à l'élément HTML5 un attribut jsf:id . Il sera clairement interprété à l'interne comme une instance UIPanel dans l'arbre des composants JSF (comme <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>

vous pouvez même le référencer d'ajax comme dans <f:ajax render="main"> .

en fait, XHTML est sur-orthographié. Sa seule intention est de faciliter le développement HTML en utilisant outils basés sur XML qui peut manipuler/transformer/générer des pages HTML du côté serveur (comme Facelets). Mais certains débutants l'utilisent aussi sans utiliser D'outil XML et le produisent tel quel, parce que c'est "trop cool"-pour une raison qui n'est pas claire.

Ne vous méprenez pas. XHTML est grand que la technologie de vue côté serveur. Mais tout simplement pas en tant que technologie de balisage côté client. Il a absolument aucune valeur le côté client.

voir aussi:

88
répondu BalusC 2017-05-23 12:17:37

sur une note connexe, consultez cet article D'IBM developerWorks: JSF 2 fu: HTML5 composite components, Part 1

8
répondu Vetle 2010-10-12 18:33:41

MyFaces a une extension pour html5. Essayez ce http://myfaces.apache.org/html5/

4
répondu ogok 2012-03-08 07:29:31

j'ai lu, que cela devrait être possible, mais je ne l'ai pas fait moi-même, encore. Peut-être que vous devriez juste utiliser HTML 5 dans le code d'emballage xHTML. Je vais voir, si je peux trouver la source si j'ai encore des informations.

[EDIT] On dirait Qu'il y a eu du travail à MyFaces pour supporter le rendu HTML5 pendant L'été de code de Goole. Je ne sais pas s'il doit être utilisé de manière productive, encore.

s'il vous Plaît nous donner un feedback, si vous l'obtenir pour fonctionner. [/Modifier]

3
répondu PageFault 2012-07-30 13:51:01

http://wiki.whatwg.org/wiki/HTML_vs._XHTML a quelques informations utiles sur la façon dont les espaces de noms peuvent être utilisés dans HTML5 pour faciliter la migration à partir de XHTML. Peut-être Pouvez-vous essayer d'appliquer le namespace comme il suggère et voir ce qui se produit?

2
répondu Martijn Verburg 2010-10-05 16:18:22