| 安定版リリース | 2.0 / 2009年6月28日 |
|---|---|
| 書かれた | ジャワ |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | Webテンプレートシステム |
| Webサイト | フェイスレット |
| 安定版リリース | 1.1.15 / 2009年11月24日 |
|---|---|
| プレビューリリース | 1.2-dev / 2006年11月10日 |
| 書かれた | ジャワ |
| オペレーティング·システム | クロスプラットフォーム |
| サイズ | 5.07 MB (アーカイブ) |
| タイプ | Webテンプレートシステム |
| ライセンス | Apache ライセンス2.0 |
| Webサイト | フェイスレット |
コンピューティングでは、Facelets はApache ライセンスに基づくオープンソースの Web テンプレート システムであり、 Jakarta Faces (JSF、旧称 Jakarta Server Faces および JavaServer Faces)のデフォルトのビュー ハンドラー テクノロジ (別名ビュー宣言言語)です。この言語が機能するには、有効な入力XMLドキュメントが必要です。Facelets はすべてのJSF UI コンポーネントをサポートし、JSF アプリケーションのビューを反映する JSF コンポーネント ツリーの構築に完全に焦点を当てています。
JSPとFacesの技術は両方ともより良く連携するように改良されているが、FaceletsはHans Bergstenの記事「JSPを捨ててJSFを改善する」[1]で指摘されている問題を解消している。
FaceletsはApache Tapestry [ 2] [3]のアイデアの一部を採用しており、比較できるほど類似しています。このプロジェクトは、HTML要素のブロックをJavaクラスに裏打ちされたフレームワークコンポーネントとして扱うTapestryのプロジェクトと概念的に似ています。Faceletsは、テンプレートと構成のサポートに関しても Apache Tilesフレームワークと類似しています。
Faceletsはもともと2005年にJacob Hookomによって作成されました[3]。JSF 1.1とJSF 1.2ではどちらもJSPをデフォルトのビュー宣言言語として使用していましたが、FaceletsはJSF専門家グループによってデフォルトのビュー宣言言語として推進されてきました。JSPはレガシーフォールバックとして非推奨となっています。[4] [5]
要素変換
Facelets では、タグ ライブラリのテンプレート タグは、修飾されたxml要素として直接入力するか、jsfc任意の非修飾要素の属性を介して間接的に入力する 2 つの形式で入力できます。後者の場合、Facelet コンパイラは実際の要素を無視し、属性によって指定された要素であるかのように要素を処理しますjsfc。
次の例は、修飾タグの直接的な使用方法を示しています。
<!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://java.sun.com/jsf/html" > <body> <h:form> <h:outputText value= "ようこそ、#{loggedInUser.name}" disabled= "#{empty loggedInUser}" /> <h:inputText value= "#{bean.property}" /> <h:commandButton value= "OK" action= "#{bean.doSomething}" /> </h:form> </body> </html>
属性を使用するとjsfc、同じコードを以下の例のように表現することもできます。
<!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://java.sun.com/jsf/html" >
< body >
< form jsfc = "h:form" >
< span jsfc = "h:outputText" value = "Welcome, #{loggedInUser.name}" disabled = "#{empty loggedInUser}" />
< input type = "text" jsfc = "h:inputText" value = "#{bean.property}" />
< input type = "submit" jsfc = "h:commandButton" value = "OK" action = "#{bean.doSomething}" />
< /フォーム>
< /ボディ>
</html>
上記のコードはブラウザで表示でき、従来のWYSIWYG設計ツールで編集できます。修飾タグを直接使用すると、これは不可能です。しかし、修飾タグを直接使用することは、実際にはFaceletsを使用する最も一般的な方法であり[6]、書籍や例で最もよく使用されているスタイルです。[7] [8]
テンプレート
Faceletsはテンプレート機能を提供します。[9] [10] Faceletsファイルはマスターテンプレートを参照し、このマスターテンプレートが定義するプレースホルダーのコンテンツを提供できます。このようなテンプレートを参照するファイルはテンプレートクライアントと呼ばれます。テンプレートクライアント自体は他のテンプレートクライアントのテンプレートとして使用することができ、テンプレートの階層を作成することができます。
以下に、単純なマスター テンプレートの例を示します。
テンプレート/マスターテンプレート.xhtml
<!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://java.sun.com/jsf/html" xmlns:ui= "http://java.sun.com/jsf/facelets" >
<h:head>
<meta http-equiv= "content-type" content= "text/html;charset=UTF-8" /> <meta http-equiv= "pragma" content= "no-cache" /> </h:head>
<h:body>
すべてのページの 標準 ヘッダー テキスト。
<ui:insert name= "body_content" />
各ページの標準 フッター テキスト。
</h:body> </html>
上記のコードには、デフォルトの HTML 'フレーム' とbody_contentという単一のプレースホルダーが含まれています。テンプレート クライアントは、このテンプレートを次のように使用できます。
テンプレートクライアント.xhtml
<ui:compositionテンプレート = "/templates/master_template.xhtml" xmlns = "http://www.w3.org/1999/xhtml" xmlns:ui = "http://java.sun.com/jsf/facelets" >
<ui:define name= " body_content" >これは、マスター テンプレートを使用するテンプレートクライアントページです。< / ui : define> </ui:composition>
上記のコードは、テンプレートを使用し、そのテンプレートのプレースホルダーにコンテンツを提供します。最終結果は、というコンテンツを持つ/templates/master_template.xhtmlというページになりますが、 は「これは、マスター テンプレートを使用するテンプレート クライアント ページです。」に置き換えられます。
template_client.xhtml/templates/master_template.xhtml<ui:insert name="body_content"/>
コンテンツの再利用
Facelets はテンプレート化に加えて、ユーザーが別のファイルにあるコンテンツを含められるようにすることで再利用をサポートします。このようなコンテンツを含めるには、次の 3 つの方法があります。
- ファイルの参照
- カスタムタグ
- 複合部品
ファイルの参照
別の Facelet のコンテンツを取り込む最も簡単な方法は、<ui:include>タグを使用して名前で参照することです。[11] [12]これにより、参照されたファイルの内容が Facelet コンパイラによって呼び出し元の Facelet に直接取り込まれます。複数の場所でコンテンツを再利用するだけでなく、大きな Facelet を小さな部分に分割するためにも使用できます。
以下に例を示します。
テンプレート/マスターテンプレート.xhtml
<!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://java.sun.com/jsf/html" xmlns:ui= "http://java.sun.com/jsf/facelets" >
<ui:include src= "html_head.xhtml" />
<h:body>
すべてのページの 標準 ヘッダー テキスト。
<ui:insert name= "body_content" />
各ページの標準 フッター テキスト。
</h:body> </html>
html_head.xhtml
<ui:composition
xmlns= "http://www.w3.org/1999/xhtml" xmlns:h= "http://java.sun.com/jsf/html" >
<h:head>
<meta http-equiv= "content-type" content= "text/html;charset=UTF-8" /> <meta http-equiv= " pragma" content= "no-cache" /> </h:head> </ui:composition>
カスタムタグ
Faceletsは、カスタムタグを介してコンテンツを含めるための間接的なサポートを提供します。[13]このようなカスタムタグは、taglibファイル内のFaceletに関連付けることができます。そのタグの出現箇所は、関連付けられたFaceletのコンテンツに置き換えられます。
以下にその例を示します。
テンプレート/マスターテンプレート.xhtml
<!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://java.sun.com/jsf/html" xmlns:ui= "http://java.sun.com/jsf/facelets" xmlns:my= "http://example.com/my" >
<ui:include src= "html_head.xhtml" />
<h:body>
各ページの 標準 ヘッダー テキスト。<my:spacer>
<ui:insert name= "body_content" />
各ページの標準 フッター テキスト。
</h:body> </html>
上記のコードでは、タグを使用して<my:spacer>、Facelet 内のコンテンツを挿入するポイントをマークします。このようなタグは、次のように Facelet に関連付けることができる Taglib ファイルで宣言する必要があります。
例: タグライブラリ.xml
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib xmlns= "http://java.sun.com/xml/ns/javaee" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd" version= "2.0" >
<名前空間> http://example.com/my </名前空間>
<タグ>
<タグ名>スペーサー< /タグ名> <ソース> spacer.xhtml </ソース> < /タグ> </facelet-taglib>
実際のコンテンツ Facelet の例を以下に示します。
スペーサー.xhtml
<ui:composition
xmlns= "http://www.w3.org/1999/xhtml" xmlns:ui= "http://java.sun.com/jsf/facelets" xmlns:h= "http://java.sun.com/jsf/html" >
<h:outputText値 = " "エスケープ = "false" /> </ui:composition>
複合部品
Facelets は、コンテンツを直接含めるだけでなく、コンテンツをファーストクラスの JSF コンポーネントとして利用できるようにする複合コンポーネント メカニズムも提供します。[14] [15]複合コンポーネントは Taglib ファイルで宣言する必要はなく、代わりに特別なディレクトリに配置する必要があります。慣例により、コンテンツには自動的に名前空間とタグ名が割り当てられます。名前空間は、固定文字列 'http://java.sun.com/jsf/composite/' と、'resources' ディレクトリを基準としたコンテンツ ファイルが存在するディレクトリ名を連結したもので構成されます。[16]タグ名は、.xhtml サフィックスを除いたファイル名になります。
以下にその例を示します。
リソース/my/spacer.xhtml
<ui:composition
xmlns= "http://www.w3.org/1999/xhtml" xmlns:ui= "http://java.sun.com/jsf/facelets" xmlns:h= "http://java.sun.com/jsf/html" xmlns:cc= "http://java.sun.com/jsf/composite" > <cc:interface/> <cc:implementation> <h:outputText value= " " escape= "false" /> </cc:implementation> </ui:composition>
上記の Facelet は、名前空間 'http://java.sun.com/jsf/composite/my' およびタグ名 'spacer' のコンポーネントとして自動的に使用可能になります。
パラメータ化されたインクルード
インクルードされたコンテンツをカスタマイズするために、Facelets ではパラメータを使用できます。これらのパラメータを介して、オブジェクトをインクルードされたコンテンツに渡し、変数として使用できます。このために使用できる<ui:include>メカニズムとしては、 [17]を使用できますが、カスタムタグと複合コンポーネントの場合は、通常のタグ属性を使用できます。複合コンポーネントでは、パラメータをインターフェースセクションで宣言する必要がありますが、[18]カスタムタグの場合はそのような要件はなく、任意の属性に提供される値は、その属性と同じ名前の変数として使用できます。
<ui:param>
参照
参考文献
- ^ Bergsten, Hans (2004 年 6 月 9 日). 「JSP のダンプによる JSF の改善」. ONJava . O'Reilly Media . 2018 年 4 月 5 日時点のオリジナルよりアーカイブ。
- ^ 「Facelets: JavaServer Faces ビュー定義フレームワーク」。java.net。2016年 12 月 31 日時点のオリジナルよりアーカイブ。
- ^ ab Hookom, Jacob (2005年8月17日). 「Inside Facelets Part 1: An Introduction」. JSFCentral . 2020年1月5日時点のオリジナルよりアーカイブ。
- ^ Burns, Ed; Schalk, Chris (2009). JavaServer Faces 2.0 完全リファレンス. McGraw-Hill . ISBN 978-0-07-162509-8. p. 55:
専門家グループは、JSP を下位互換性レイヤーとして残しながら、新しい機能の基盤として Facelets を進めることを決定しました。
- ^ Burns, Ed; Kitain, Roger, eds. (2010 年 11 月 8 日). JavaServer Faces 仕様、バージョン 2.1. JCP (技術レポート) (MR2 版). Oracle . JSR-314. p. 10-1:
Facelets は、最初から JSF を念頭に置いて設計された JSP の代替品です。バージョン 2 以降で導入された新機能は、Facelets を使用するページ作成者にのみ公開されます。JSP は下位互換性のために保持されています。
- ^ 「最新の 'jsf' の質問」。stackoverflow.com 。 2016年11月22日閲覧。
- ^ JavaServer Faces 2.0、完全リファレンス、Ed Burns および Chris Schalk 著
- ^ Core JavaServer Faces (第 3 版)、David Geary および Cay S. Horstmann 著
- ^ 「JSF 2 fu、パート 2: テンプレートと複合コンポーネント」。ibm.com。2009年 6 月 2 日。2016 年11 月 22 日閲覧。
- ^ 「ui (JSF 2.0 ページ宣言言語: Facelets バリアント)」。oracle.com。2016年11 月 22 日閲覧。
- ^ 「include (JSF 2.0 ページ宣言言語: Facelets バリアント)」。oracle.com。2016年11 月 22 日閲覧。
- ^ 「覚えておくべきこと: Facelets ui:include は強力であると考えられる」pilhuhn.blogspot.com。2009 年 12 月 4 日。2016年11 月 22 日閲覧。
- ^ 「Facelets を使用したカスタム JSF コンポーネント」。wordpress.com。2008年 2 月 29 日。2016 年 10 月 19 日時点のオリジナルよりアーカイブ。2016年11 月 22 日閲覧。
- ^ 「composite(JSF 2.0 Page Decraration Language: Facelets Variant)」。oracle.com 。 2016年11月22日閲覧。
- ^ 「JSF 2 の新機能」。wordpress.com。2009年 7 月 31 日。2016 年11 月 22 日閲覧。
- ^ JSR 314、10.3.3.1、http://jcp.org/en/jsr/detail?id=314
- ^ 「param(JSF 2.0 Page Decraration Language: Facelets Variant)」。oracle.com 。 2016年11月22日閲覧。
- ^ 「interface (JSF 2.0 Page Decraration Language: Facelets Variant)」。oracle.com 。 2016年11月22日閲覧。
文献
- Wadia, Zubin; Marinschek, Martin; Saleh, Hazem; Byrne, Dennis (2008 年 9 月 22 日)。Apache MyFaces および Facelets の決定版ガイド (第 1 版) 。Apress。p . 400。ISBN 978-1-59059-737-8. 2010年1月2日時点のオリジナルよりアーカイブ。2009年9月4日閲覧。
- Wadia, Zubin; Aranda, Bruno (2008 年 5 月 26 日)。Facelets Essentials: JavaServer Faces ビュー定義フレームワーク ガイド (第 1 版) 。Apress。p . 84。ISBN 978-1-4302-1049-8. 2010年1月8日時点のオリジナルよりアーカイブ。2009年9月4日閲覧。
外部リンク
- Jakarta EE チュートリアルの第 8 章「Facelets の紹介」
- Wayback Machineの Facelets 開発者ドキュメント(2016-12-31 アーカイブ)
- Hightower, Richard (2006 年 2月21 日)。「FaceletsはJSF にぴったりフィットします」。Java。DeveloperWorks。IBM。2021年2 月 24 日のオリジナルからアーカイブ。
- Wayback Machineの Facelets ホームページ(2017-04-04 アーカイブ)
