web-dev-qa-db-ja.com

JavaServer Faces 2.2およびHTML5のサポート、なぜXHTMLがまだ使用されているのか

JSF 2.2でのHTML5サポート について読んだ後、Netbeansの新しいWebアプリケーションで作成されたテンプレートファイルで、以前のFaceletsバージョンと同じXHTMLDoctypeを見つけて驚いた。唯一の違いは、HTMLタグがJSF2.2で読み取ることです。

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">

、古いJSFバージョンでは次のようにではなく:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://Java.Sun.com/jsf/html">

HTML5の約束を念頭に置いてXHTMLを使い続けるのは少し間違っているようです。 「サーバーライブラリ」ではなく「登録ライブラリ」から選択した場合にのみ、2.​​2を使用するオプションがあります。これは、フレームワークバージョンがプロジェクトに適用される方法に影響しますか?

FaceletsはHTML5をサポートするにはXHTMLに依存しすぎていますか?

16
user1128272

数年前のXHTMLの誇大宣伝の間に、多くの人がXHTMLの目的を誤解したようです。短編小説:チェック XHTML wikiページ 。注意深く読んでください。一言で言えば、Faceletsは、生成されたHTML出力で使用されているDoctypeをまったく気にしません。 FaceletsテンプレートでHTML5Doctypeを完全に細かく宣言できます。

NetbeansがデフォルトでXHTMLdoctypeを使用してドキュメントを準備するのに対し、最近ではHTML5が推奨されるdoctypeであるのは確かに残念です。私はNetbeansを使用していませんが、Eclipseでは、これらのテンプレートを簡単に編集したり、独自のテンプレートを作成したりすることもできます。 XHTMLDoctype全体をHTML5Doctypeに置き換えることができます。これらのテンプレートは、Web"HTMLファイル"エディター"テンプレートを介してIDE prefsで検索/作成できます。

JSF 2.2でのHTML5サポートは、特にHTML5Doctypeをサポートできることとは何の関係もないことに注意してください。それどころか、これは、レガシーJSPが使用されている場合でも、すべてのJSFバージョンでサポートされています。 JSPとFaceletsは、HTML出力を生成できるビューテクノロジであり、HTML5でも問題ありません。これは、次の密接に関連する回答でも詳しく説明されています。 HTML4/5でJSF + Faceletsを使用することは可能ですか?

代わりに、JSF 2.2でのHTML5サポートは、カスタムJSFコンポーネント属性を定義し、カスタムHTML要素をJSFコンポーネントに変換する可能性をカバーしています。これは、JSF2.1以前では不可能でした。カスタムJSFコンポーネント属性(HTML5推奨のdata-xxx属性を含む)は、デフォルトのJSFレンダラーによって単に無視されました。次の関連する回答も参照してください。 カスタムHTMLタグ属性はJSFによってレンダリングされません 。 JSF 2.2では、次のように新しいhttp://xmlns.jcp.org/jsf/passthrough名前空間でカスタム属性を簡単に指定できます。

<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputText ... a:autocorrect="off" />

これは、生成されたHTML出力に実際に含まれるように<h:inputText>サポートされていない属性autocorrectになります。 Java EEチュートリアル )に示すように、aの代わりにp( "属性")のXML名前空間プレフィックスを使用することに注意してください。 =、PrimeFacesのデフォルトのXML名前空間プレフィックスpと衝突するため。

カスタムHTML要素(HTML5要素を含む)をJSFコンポーネントに変換するには、jsf:idなどのjsf属性を指定します。

<html ... xmlns:jsf="http://xmlns.jcp.org/jsf">
...
<header jsf:id="header">...</header>
<main jsf:id="main">...</main>
<footer jsf:id="footer">...</footer>

それらは隠蔽されてUIPanelに変換されます(<h:panelGroup>のように)。そして、はい、それらは例えばで参照可能です。 <f:ajax render>

言い換えれば、「HTML5サポート」は「カスタム属性サポート」のもう1つの流行語です。

36
BalusC