Faceletsは、XML名前空間に依存してXHTMLを処理します。 HTML 4はどうですか。私が知る限り、HTML 5は名前空間をサポートしていません。また、HTML 5には、XHTMLでは利用できない新しい要素がいくつかあります。 HTML 4とXHTMLでさえ、サポートする要素と属性に関していくつかの違いがあります。
問題は、Faceletsを使用してHTML 4/5ドキュメントをレンダリングすることは可能ですか?もしそうなら、どのように?
Faceletsは本質的にXMLマークアップを食べて放出するXMLベースのビューテクノロジーであるため、HTML4 Doctypeでは使用できません。 HTML4 doctypeは、<link>
、<meta>
、<br>
、および<hr>
など、自己完結型ではないいくつかの要素を記述します。ただし、XMLでは<link/>
、<meta/>
などのように強制的に閉じる必要があるため、HTML4 Doctypeを使用することはFaceletsのオプションではありません(つまり、標準やw3バリデーターを恐れてください。ただし、すべてではないにしても、ほとんどのWebブラウザーで完全に機能します)。
一方、HTML5はXMLマークアップを許可します。これは .2.2章-要素 で指定されています:
例:
<link type="text/css" href="style.css"/>
作成者は、オプションで、HTML構文のvoid要素にもこの同じ構文を使用することを選択できます。一部の著者は、スラッシュの前に空白を含めることも選択していますが、これは必須ではありません。 (その方法で空白を使用することは、XHTML 1.0、付録Cの互換性ガイドラインから継承された規則です。)
私自身も<!DOCTYPE html>
をすべて使用しています。JSF/ Faceletsでも、ページ上部に<?xml?>
宣言がなくても使用します。すべてのブラウザで完全に機能します。 XHTML Doctypeを使用すると、仕様に従って、Content-Type
of application/xhtml+xml
を使用する必要があります。これにより、MSIEがチョークするだけになります(理解できません)。そして、それは依然として最も広く使用されているブラウザの1つです... XHTMLコンテンツタイプをtext/html
に置き換えることは 有害と見なされる であるため、これも行いたくありません。
あなたの議論に従って:
HTML 5は名前空間をサポートしていません。
これは関係ありません。名前空間は、XMLベースのサーバーサイドビューテクノロジ(Faceletsなど)でのみ関心があり、これらのタグを使用して純粋なHTMLを生成できます。次の例は、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>
これにより、正当に有効なHTML5がレンダリングされます(クライアント側):
<!DOCTYPE html>
<html lang="en">
<head>
<title>Title</title>
</head>
<body>
Some text
</body>
</html>
ご覧のとおり、Faceletsはクライアント側では意味を持たないため、すでにXHTML宣言を削除しています。
そして、
また、HTML 5にはXHTMLでは利用できないいくつかの新しい要素があります
これも意味がありません。生成される出力がすべてです。これはHTML5と同じくらい良いものです。唯一の問題は、ブラウザのサポートと、HTML5固有の要素をレンダリングするサードパーティのJSFコンポーネントの可用性です。 JSF 2.2以降、新しい passthrough elements 機能を使用して、カスタム要素をJSFコンポーネントに変えることができます。 HTML5要素にjsf:id
属性を指定するだけです。内部的には、JSFコンポーネントツリーのUIPanel
インスタンス(<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>
<f:ajax render="main">
のように、ajaxから参照することもできます。
実際、XHTMLは誇張されすぎています。その唯一の目的は、XMLベースのツールを使用してHTML開発を容易にすることです。ただし、XMLツールを使用せずにそのまま使用し、そのまま出力する場合もあります。これは、理由が不明なため「クール」だからです。
誤解しないでください。 XHTMLは、サーバーサイドビューテクノロジーとしてgreatです。しかし、単にクライアント側のマークアップ技術としてではありません。クライアント側ではまったく価値がありません。
関連するメモについては、このIBM developerWorksの記事をご覧ください。 JSF 2 fu:HTML5複合コンポーネント、パート1
MyFacesには、html5の拡張機能があります。これを試してください http://myfaces.Apache.org/html5/
これは可能であるべきだと読みましたが、私はまだそれをしませんでした。 xHTMLラッパーコード内でHTML 5を使用する必要があるかもしれません。情報源を見つけることができれば、また見ます。
[編集] MyFacesでは、Googleの夏のコードの間にHTML5レンダリングをサポートするための作業が行われたようです。生産的な方法で使用すべきかどうかはまだわかりません。
機能するようになったら、フィードバックをお寄せください。 [/編集]
http://wiki.whatwg.org/wiki/HTML_vs._XHTML には、XHTMLからの移行を支援するためにHTML5で名前空間を使用する方法に関する有用な情報があります。おそらく、名前空間が示唆するとおりに名前空間を適用して、何が起こるかを確認できますか?