public interface TagDecorator 関連する TagHandler でコンパイルするために処理される前にタグを完全に変更する機能を提供します。
ランタイムは、decorate(javax.faces.view.facelets.Tag) メソッドで次のアクションを実行するこのインターフェースのデフォルトの実装を提供する必要があります。
tag 引数の属性を調べます。どの属性も http://xmlns.jcp.org/jsf 名前空間にあると宣言されていない場合は、ViewHandler.FACELETS_DECORATORS_PARAM_NAME context-param の値から作成された TagDecorator インスタンスのリストを繰り返し処理します(存在する場合)。エントリごとに、その decorate(javax.faces.view.facelets.Tag) メソッドを呼び出し、引数 tag を渡します。decorate(javax.faces.view.facelets.Tag) メソッドから非 null を返す最初のそのようなエントリは、反復を停止させる必要があります。
tag 引数の 1 つ以上の属性が http://xmlns.jcp.org/jsf 名前空間にある場合は、次の手順で説明するように decoratedTag への参照を取得し、前の手順で説明したように TagDecorator インスタンスのリストを反復処理しますが、decorate(javax.faces.view.facelets.Tag) への各呼び出しに decoratedTag を渡します。
タグの名前空間が空の文字列または http://www.w3.org/1999/xhtml 以外の名前空間である場合は、FaceletException をスローします。
localName を Tag.getLocalName() からの戻り値とします。localName を使用して、次の表に基づいてデータ構造内のエントリを識別します。エントリが識別されたら、targetTag をそのエントリの「ターゲットタグ」列の値とします。
| localName | セレクター属性 | ターゲットタグ |
|---|---|---|
| a | jsf:action | 時間: commandLink |
| a | jsf:actionListener | 時間: commandLink |
| a | jsf:value | 時間: outputLink |
| a | jsf:outcome | h: リンク |
| 体 | h:body | |
| ボタン | 時間: commandButton | |
| ボタン | jsf:outcome | h: ボタン |
| 形 | h:form | |
| 頭 | h:head | |
| イメージ | 時間: graphicImage | |
| 入力 | type="button" | 時間: commandButton |
| 入力 | type=" チェックボックス " | 時間: selectBooleanCheckbox |
| 入力 | type="color" | 時間: inputText |
| 入力 | type="date" | |
| 入力 | type="datetime" | |
| 入力 | type="datetime-local" | |
| 入力 | type="email" | |
| 入力 | type="month" | |
| 入力 | type="number" | |
| 入力 | type="range" | |
| 入力 | type="search" | |
| 入力 | type="time" | |
| 入力 | type="url" | |
| 入力 | type="week" | |
| 入力 | type="file" | 時間: inputFile |
| 入力 | type="hidden" | 時間: inputHidden |
| 入力 | type="password" | 時間: inputSecret |
| 入力 | type="reset" | 時間: commandButton |
| 入力 | type="submit" | 時間: commandButton |
| 入力 | type="*" | 時間: inputText |
| ラベル | 時間: outputLabel | |
| リンク | 時間: outputStylesheet | |
| スクリプト | 時間: outputScript | |
| select | multiple="*" | 時間: selectManyListbox |
| select | 時間: selectOneListbox | |
| textarea | 時間: inputTextArea |
同じ localName を持つ行が複数ある場合は、引数 tag の属性と表の「セレクター属性」列の値を指定された順序で使用して、一致するエントリを検索します。セレクター属性値 * は任意の値を示します。表では、セレクター属性名に jsf : というプレフィックスが付いている場合、タグは http://xmlns.jcp.org/jsf 名前空間にあるかのように扱われます。実際の Facelet ページでは、プレフィックスではなく名前空間が重要です。
一致するエントリが見つからない場合は、jsf:element を targetTag の値とする
引数 tag のすべての属性を次のように変換します。まず、次の特性を持つ TagAttribute の新しいインスタンスを作成します: 場所: 引数 tag の場所から、名前空間: http://xmlns.jcp.org/jsf/passthrough、ローカル名: Renderer.PASSTHROUGH_RENDERER_LOCALNAME_KEY の値、修飾名: ローカル名と同じでプレフィックスが "p:" のもの、値: 引数 tag のローカル名から。この TagAttribute を elementNameTagAttribute とします。
引数 tag の属性ごとに、次の特性を持つ TagAttribute への参照を取得します。説明のため、このような属性を convertedTagAttribute とします。
convertedTagAttribute の場所: 引数 tag の場所から。
現在の属性の名前空間が http://xmlns.jcp.org/jsf の場合、convertedTagAttribute の修飾名は現在の属性のローカル名でなければならず、convertedTagAttribute の名前空間は空の文字列でなければなりません。これにより、現在の属性がこのマークアップによって表される UIComponent インスタンスの適切なプロパティとして設定されます。
現在の属性の名前空間が空でなく、引数 tag の名前空間と異なる場合、現在の属性は convertedTagAttribute になります。
それ以外の場合、現在の属性の名前空間は http://xmlns.jcp.org/jsf/passthrough であると想定します。ConvertedTagAttribute の修飾名は、現在の属性のローカル名にプレフィックス "p:" が付いたものです。convertedTagAttribute の名前空間は http://xmlns.jcp.org/jsf/passthrough である必要があります。
elementNameTagAttribute とすべての convertedTagAttribute を含む TagAttributes インスタンスを作成します。
次の特性を持つ新しい Tag インスタンスを作成します。
場所: 引数 tag の場所から。
名前空間: targetTag のプレフィックスが "h" の場合は http://xmlns.jcp.org/jsf/html、targetTag のプレフィックスが "jsf" の場合は http://xmlns.jcp.org/jsf。
ローカル名: ターゲットタグ列のローカル名。
属性: 前のステップの TagAttributes。
この新しい Tag インスタンスを convertedTag とします。
この装飾プロセスから返された Tag インスタンスは、「Jakarta Server Faces 2.0 のフェイスレットの ViewDeclarationLanguage 実装の仕様」というタイトルの仕様書のセクションに従って、最終的に FaceletHandler インスタンスに渡される必要があります。
| 修飾子と型 | メソッドと説明 |
|---|---|
Tag | decorate(Tag tag) 処理された場合は、新しい Tag インスタンスを返します。それ以外の場合は、null を返します。 |
Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.