public abstract class ViewDeclarationLanguage extends ObjectSE
ビュー宣言言語は Jakarta Server Faces ランタイムと対話するために実装しなければならないことを契約。このクラスの実装はスレッドセーフでなければなりません。
このクラスのインスタンスはアプリケーションスコープであり、ViewDeclarationLanguageFactory
から取得する必要があります。
修飾子と型 | フィールドと説明 |
---|---|
static StringSE | FACELETS_VIEW_DECLARATION_LANGUAGE_ID Facelets ビュー宣言言語の識別子。 |
static StringSE | JSP_VIEW_DECLARATION_LANGUAGE_ID Jakarta Server Pages ビュー宣言言語の識別子。 |
コンストラクターと説明 |
---|
ViewDeclarationLanguage() |
修飾子と型 | メソッドと説明 |
---|---|
abstract void | buildView(FacesContext context, UIViewRoot root) 子供たちと一緒に移入する、 |
ListSE<StringSE> | calculateResourceLibraryContracts(FacesContext context, StringSE viewId) 引数 |
UIComponent | createComponent(FacesContext context, StringSE taglibURI, StringSE tagName, MapSE<StringSE, ObjectSE> attributes)
|
abstract UIViewRoot | createView(FacesContext context, StringSE viewId) 引数 |
abstract BeanInfoSE | getComponentMetadata(FacesContext context, Resource componentResource) 引数 |
StringSE | getId() このビュー宣言言語を識別するために使用できる null 以外の文字列を返します。 |
abstract Resource | getScriptComponentResource(FacesContext context, Resource componentResource) 引数 |
abstract StateManagementStrategy | getStateManagementStrategy(FacesContext context, StringSE viewId) 状態の保存と復元の実装を制御する必要のある実装では、 |
abstract ViewMetadata | getViewMetadata(FacesContext context, StringSE viewId) 引数 |
StreamSE<StringSE> | getViews(FacesContext facesContext, StringSE path, int maxDepth, ViewVisitOption... options) 指定された初期パスをルートとするビューツリーをウォークすることにより、レイジーに配置された |
StreamSE<StringSE> | getViews(FacesContext facesContext, StringSE path, ViewVisitOption... options) 指定された初期パスをルートとするビューツリーをウォークすることにより、レイジーに配置された |
abstract void | renderView(FacesContext context, UIViewRoot view) 引数 |
abstract UIViewRoot | restoreView(FacesContext context, StringSE viewId) 以前に作成したビューから |
void | retargetAttachedObjects(FacesContext context, UIComponent topLevelComponent, ListSE<AttachedObjectHandler> handlers) 引数 |
void | retargetMethodExpressions(FacesContext context, UIComponent topLevelComponent) 引数 |
boolean | viewExists(FacesContext context, StringSE viewId) 指定された viewId に対応する物理リソースが存在するかどうかをテストします。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static final StringSE JSP_VIEW_DECLARATION_LANGUAGE_ID
Jakarta Server Pages ビュー宣言言語の識別子。
public abstract UIViewRoot restoreView(FacesContext context, StringSE viewId)
以前に作成したビューから UIViewRoot
を復元します。デフォルト実装の仕様については、セクション JSF.7.7.2 を参照してください。
context
- このリクエストの FacesContext
viewId
- 以前にレンダリングされたビューの識別子。NullPointerExceptionSE
- 引数のいずれかが null
の場合 public abstract ViewMetadata getViewMetadata(FacesContext context, StringSE viewId)
引数 viewId
またはメタデータが見つからない場合は null
で表されるビューのビューメタデータへの参照を返します。デフォルト実装の仕様については、セクション JSF.7.7.2 を参照してください。Jakarta Server Faces 2 実装の Facelets は、非 null
を返す必要があります。Jakarta Server Pages 実装は null
を返す必要があります。
context
- このリクエストの FacesContext
。viewId
- メタデータを抽出するビュー IDNullPointerExceptionSE
- 引数のいずれかが null
の場合。FacesException
- メタデータの取得にエラーがある場合 public abstract UIViewRoot createView(FacesContext context, StringSE viewId)
引数 viewId
によって参照されるアーティファクトに含まれる VDL から UIViewRoot
を作成します。デフォルトの実装の仕様については、セクション JSF.7.7.2 を参照してください。
context
- このリクエストの FacesContext
viewId
- このビューを説明する VDL 構文を含むアーティファクトの識別子。NullPointerExceptionSE
- 引数のいずれかが null
の場合 public abstract void buildView(FacesContext context, UIViewRoot root) throws IOExceptionSE
子供たちと一緒に移入する、createView(jakarta.faces.context.FacesContext, java.lang.String)
への呼び出しを介して作成されている必要があり、引数 UIViewRoot
を引き起こすために、この VDL 実装に任意のアクションを特定してください。
Facelets の実装では、ビューを構成するマークアップを実行する必要があります。ビュー内の UIComponent
インスタンスは、UIComponent
で定義された他のライフサイクルメソッドと同じ深さ優先で検出され、その間にビューに追加されます(ただしレンダリングされません)。トラバーサル。ランタイムは、次のいずれかが発生する前に、ビューが完全に入力されている必要があることを保証する必要があります。
アプリケーションに接続されている PhaseListener
の PhaseListener.afterPhase(jakarta.faces.event.PhaseEvent)
メソッドが呼び出されます
UIViewRoot.setAfterPhaseListener(jakarta.el.MethodExpression)
または UIViewRoot.addPhaseListener(jakarta.faces.event.PhaseListener)
を介してインストールされた UIViewRoot
フェーズリスナーが呼び出されます。
root
にすでに子が設定されている場合でも、ビューを再構築する必要がありますが、既存のコンポーネントが VDL ページの対応する VDL と正しくペアリングされるように注意する必要があります。また、ビューからのコンポーネントの追加または削除中に通常生成されるシステムイベントは、ビューの作成中に一時的に無効にし、ビューの作成時に再度有効にする必要があります。
context
- このリクエストの FacesContext
root
- この VDL 実装に固有の手法を使用して、子を実装する UIViewRoot
。IOExceptionSE
- 何らかの理由でビューを構築できない場合 public abstract void renderView(FacesContext context, UIViewRoot view) throws IOExceptionSE
引数 view
をルートとするビューをレンダリングします。デフォルトの実装の仕様については、セクション JSF.7.7.2 を参照してください。
context
- このリクエストの FacesContext
view
- createView(jakarta.faces.context.FacesContext, java.lang.String)
または restoreView(jakarta.faces.context.FacesContext, java.lang.String)
への早期呼び出しからの UIViewRoot
。NullPointerExceptionSE
- 引数のいずれかが null
の場合 IOExceptionSE
- 何らかの理由でビューをレンダリングできない場合 public abstract BeanInfoSE getComponentMetadata(FacesContext context, Resource componentResource)
引数 componentResource
、またはメタデータが見つからない場合は null
で表される複合コンポーネントのコンポーネントメタデータへの参照を返します。デフォルトの実装の仕様については、セクション JSF.7.7.2 を参照してください。Jakarta Server Pages 実装は、UnsupportedOperationException
をスローする必要があります。
context
- このリクエストの FacesContext
。componentResource
- コンポーネントを表す Resource
。NullPointerExceptionSE
- 引数のいずれかが null
の場合。FacesException
- メタデータの取得にエラーがある場合 UnsupportedOperationExceptionSE
- これが Jakarta Server Pages VDL 実装の場合。public abstract Resource getScriptComponentResource(FacesContext context, Resource componentResource)
引数 componentResource
を指定して、実装固有のアクションを実行して Resource
を検出します。デフォルトの実装の仕様については、セクション JSF.7.7.2 を参照してください。Jakarta Server Pages 実装は、UnsupportedOperationException
をスローする必要があります。
context
- このリクエストの FacesContext
。componentResource
- コンポーネントを表す Resource
。componentResource
に対応する Resource
NullPointerExceptionSE
- 引数のいずれかが null
の場合。FacesException
- スクリプトコンポーネントリソースの取得でエラーが発生した場合 UnsupportedOperationExceptionSE
- これが Jakarta Server Pages VDL 実装の場合。public UIComponent createComponent(FacesContext context, StringSE taglibURI, StringSE tagName, MapSE<StringSE,ObjectSE> attributes)
ViewDeclarationLanguage
固有のタグライブラリ URI とタグ名を指定してコンポーネントを作成します。ランタイムは、FaceletsVDL で動作するこのメソッドをサポートする必要があります。他の種類の ViewDeclarationLanguage
がサポートされている場合がありますが、サポートする必要はありません。このメソッドをオーバーライドしない装飾された ViewDeclrationLanguage
実装との下位互換性のために、null
を返すデフォルトの実装が提供されています。ただし、このメソッドが導入された仕様のバージョンに準拠する実装では、このメソッドを実装する必要があります。
context
- このリクエストの FacesContext
taglibURI
- コンポーネントを含む完全修飾タグライブラリ URItagName
- コンポーネントを公開するライブラリ内のタグの名前 attributes
- 属性を指定する必要がない場合、このコンポーネントまたは null
の作成を引き起こすマークアップで指定されたであろう名前 = 値のペア。NullPointerExceptionSE
- context
、taglibURI
、tagName
が null
の場合 public void retargetAttachedObjects(FacesContext context, UIComponent topLevelComponent, ListSE<AttachedObjectHandler> handlers)
引数 topLevelComponent
のコンポーネントメタデータが getComponentMetadata(jakarta.faces.context.FacesContext, jakarta.faces.application.Resource)
の以前の呼び出しによって使用可能になっていると仮定すると、コンポーネントメタデータを活用して、アタッチされたオブジェクトを最上位の複合コンポーネントから複合コンポーネント内の個々の AttachedObjectTarget
インスタンスに再ターゲットします。このメソッドは、複合コンポーネントの使用が検出されたときに UIComponent
ツリーを作成するときに、ViewDeclarationLanguage
実装によって呼び出される必要があります。
以下と意味的に同等のアルゴリズムを実装する必要があります。
複合コンポーネントのメタデータを取得します。現在、これには、BeanInfo
のインスタンスとなる UIComponent.BEANINFO_KEY
コンポーネント属性の値を取得する必要があります。メタデータが見つからない場合は、エラーメッセージをログに記録して戻ります。
BeanInfo
から BeanDescriptor
を取得します。
BeanDescriptor
の getValue()
メソッドから AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY
の値を取得します。これは List<
AttachedObjectTarget
> になります。これを targetList とします。
引数 handlers
の curHandler エントリごとに
forAttributeValue を AttachedObjectHandler.getFor()
からの戻り値とします。
targetList の curTarget エントリごとに、一致を引き起こす次の項目の最初の項目がこのアクションを実行します。
curTarget.getTargets() から返されたリスト内の UIComponent
ごとに、curHandler を呼び出します。applyAttachedObject()、FacesContext
と UIComponent
を渡します。
そして、この内部ループを終了させます。
curHandler が ActionSource2AttachedObjectHandler
のインスタンスであり、curTarget が ActionSource2AttachedObjectTarget
のインスタンスであり、curTarget.getName() が curTargetName と等しい場合は、一致していると見なします。
curHandler が EditableValueHolderAttachedObjectHandler
のインスタンスであり、curTarget が EditableValueHolderAttachedObjectTarget
のインスタンスであり、curTarget.getName() が curTargetName と等しい場合は、一致すると見なします。
curHandler が ValueHolderAttachedObjectHandler
のインスタンスであり、curTarget が ValueHolderAttachedObjectTarget
のインスタンスであり、curTarget.getName() が curTargetName と等しい場合は、一致していると見なします。
curHandler が BehaviorHolderAttachedObjectHandler
のインスタンスであり、curTarget が BehaviorHolderAttachedObjectTarget
のインスタンスであり、次の条件のいずれかが当てはまる場合
null
ではなく、curTargetName と同じです。null
であり、curTarget.isDefaultEvent() は true
です。それを一致と見なします。
実装は、アタッチされたオブジェクトをトップレベルのコンプサイトコンポーネントからコンポジットおよび非コンポジットコンポーネントであるターゲットに再ターゲットすることをサポートする必要があります。
UnsupportedOperationException
をスローする実装が提供されます。バージョン 2.0 に準拠し、仕様を超える Faces 実装は、このメソッドをオーバーライドする必要があります。
context
- このリクエストの FacesContext。topLevelComponent
- アタッチされたオブジェクトをアタッチする必要があるビューの UIComponent。この UIComponent には、そのコンポーネントメタデータがすでに関連付けられており、JavaBeans API を介して利用できる必要があります。handlers
- アタッチされたオブジェクトのタグハンドラー NullPointerExceptionSE
- 引数のいずれかが null
の場合。public void retargetMethodExpressions(FacesContext context, UIComponent topLevelComponent)
引数 topLevelComponent
のコンポーネントメタデータが getComponentMetadata(jakarta.faces.context.FacesContext, jakarta.faces.application.Resource)
の以前の呼び出しによって使用可能になっていると仮定すると、最上位コンポーネントから適切な内部コンポーネントにメソッド式を再ターゲットする目的でコンポーネントメタデータを活用します。MethodExpression
である属性ごとに( "method-signature
" 属性が存在し、"type
" 属性が存在しないことで示されます)、次のアクションを実行する必要があります。
ターゲット属性の値を取得します。値が ValueExpression
の場合は、それを評価します。ターゲット属性がない場合は、メタデータ要素の名前をターゲット属性の評価値とします。
ターゲットをスペース(タブではなく)で区切られた ID のリストとして解釈します。リストの各エントリについて:
現在のリストエントリと等しい ID を持つ topLevelComponent の内部コンポーネントを見つけます。説明のために、このコンポーネントはターゲットと呼ばれます。見つからない場合は、ログに記録してエラーを出し、次の属性に進みます。
説明のために、属性の宣言された名前は name と呼ばれます。
topLevelComponent の属性マップで、キー名の下のエントリを検索します。結果が ValueExpression
であると想定します。説明のために、これは attributeValueExpression です。見つからない場合は、エラーをログに記録して、次の属性に進みます。
名前が文字列 "action" または引用符なしの "actionListener" と等しい場合、ターゲットは ActionSource2
であると想定します。
名前が文字列 "validator" または引用符なしの "valueChangeListener" と等しい場合、ターゲットは EditableValueHolder
であると想定します。
文字列は、名前のために適切な署名の MethodExpression
を作成すること attributeValueExpression と使用上のコール getExpressionString()
。
名前が前述の文字列のいずれとも等しくない場合は、attributeValueExpression で getExpressionString()
を呼び出し、その文字列を使用して MethodExpression
を作成します。この場合、<composite:attribute />
タグの "method-signature
" 属性の値に基づいて署名が作成されます。
結果の MethodExpression
を、説明のために attributeMethodExpression と呼びます。
名前が引用符なしの文字列 "action" と等しい場合は、attributeMethodExpression を渡して、ターゲットで ActionSource2.setActionExpression(jakarta.el.MethodExpression)
を呼び出します。
名前が引用符なしの文字列 "actionListener" と等しい場合は、ターゲットで ActionSource.addActionListener(jakarta.faces.event.ActionListener)
を呼び出し、MethodExpressionActionListener
でラップされた attributeMethodExpression を渡します。
名前が引用符なしの文字列 "validator" と等しい場合は、ターゲットで EditableValueHolder.addValidator(jakarta.faces.validator.Validator)
を呼び出し、MethodExpressionValidator
でラップされた attributeMethodExpression を渡します。
名前が引用符なしの文字列 "valueChangeListener" と等しい場合は、ターゲットで EditableValueHolder.addValueChangeListener(jakarta.faces.event.ValueChangeListener)
を呼び出し、MethodExpressionValueChangeListener
でラップされた attributeMethodExpression を渡します。
それ以外の場合は、MethodExpression
をコンポーネント属性セットに配置する必要があると想定します。runtme は、"method-signature
" 属性の値に基づいて MethodExpression
インスタンスを作成する必要があります。
UnsupportedOperationException
をスローする実装が提供されます。バージョン 2.0 に準拠し、仕様を超える Faces 実装は、このメソッドをオーバーライドする必要があります。
context
- このリクエストの FacesContext。topLevelComponent
- アタッチされたオブジェクトをアタッチする必要があるビューの UIComponent。この UIComponent には、そのコンポーネントメタデータがすでに関連付けられており、JavaBeans API を介して利用できる必要があります。NullPointerExceptionSE
- context
または topLevelComponent
が null
の場合。public ListSE<StringSE> calculateResourceLibraryContracts(FacesContext context, StringSE viewId)
引数 viewId
で指定されたビューで使用できるようになるリソースライブラリ契約のリストを返します。一致するものが見つからない場合は、空のリストを返します。デフォルトの実装の仕様については、セクション JSF.7.7.2 を参照してください。以前の実装との下位互換性のために、null
を返す実装が提供されていますが、このメソッドが導入された仕様のバージョンに準拠する実装は、JSF.7.7.2 で指定されているように実装する必要があります。
context
- このリクエストの FacesContext
viewId
- 該当するリソースライブラリ契約を計算する必要があるビュー ID。public abstract StateManagementStrategy getStateManagementStrategy(FacesContext context, StringSE viewId)
状態の保存と復元の実装を制御したい実装の場合、StateManagementStrategy
ではそれが可能です。null
を返すことは、実装がランタイムに状態の保存と復元を処理することを望んでいることを示します。Jakarta Server Faces 2.0 以降の Facelets に VDL を提供する実装は、このメソッドから非 null
を返す必要があります。
context
- 現在のリクエストの FacesContext
。viewId
- ビュー ID。public boolean viewExists(FacesContext context, StringSE viewId)
指定された viewId に対応する物理リソースが存在するかどうかをテストします。
デフォルトの実装では、ResourceHandler.createViewResource(jakarta.faces.context.FacesContext, java.lang.String)
を使用して物理リソースを検索します。
context
- このリクエストの FacesContext
。viewId
- テストするビュー IDpublic StreamSE<StringSE> getViews(FacesContext facesContext, StringSE path, ViewVisitOption... options)
指定された初期パスをルートとするビューツリーを進めることにより、おそらく怠惰に設定された Stream
を返します。ビューツリーは幅優先でトラバースされ、ストリーム内の要素は論理ビュー ID です。
このメソッドは、それを呼び出すことは式を評価することと同等であるかのように機能します。
言い換えると、リソースツリーのすべてのレベルにアクセスします。getViewResources(facesContext, start, Integer.MAX_VALUE, options)
facesContext
- このリクエストの FacesContext
。path
- ビューの検索を開始する最初のパス options
- トラバーサルに影響を与えるオプション。これらの詳細については、ViewVisitOption
を参照してください。Stream
SEpublic StreamSE<StringSE> getViews(FacesContext facesContext, StringSE path, int maxDepth, ViewVisitOption... options)
指定された初期パスをルートとするビューツリーを進めることにより、おそらく怠惰に設定された Stream
を返します。ビューツリーは幅優先でトラバースされ、ストリーム内の要素は論理ビュー ID です。
maxDepth
パラメーターは、常にアクセスされる初期パスを超えてアクセスするディレクトリレベルの最大深度です。値は、指定された初期パスではなく、ルート(/
)を基準にしています。たとえば、maxDepth
= 3
および初期パス /foo/
が与えられた場合、訪問は /foo/bar/
まで進みます。ここで、/
は深さ 1
としてカウントされ、/foo/
は深さ 2
としてカウントされ、/foo/bar/
は深さ 3
としてカウントされます。初期パスの深さ以下の値は、初期パスのみが訪問されることを意味します。MAX_VALUE
SE の値を使用して、すべてのレベルにアクセスする必要があることを示すことができます。
facesContext
- このリクエストの FacesContext
。path
- ビューの検索を開始する最初のパス maxDepth
- ルート(/
)から数えた、アクセスするネストされたディレクトリの絶対最大深度。options
- トラバーサルに影響を与えるオプション。これらの詳細については、ViewVisitOption
を参照してください。Stream
SEpublic StringSE getId()
このビュー宣言言語を識別するために使用できる null 以外の文字列を返します。
デフォルトの実装は、ビュー宣言言語実装の完全修飾クラス名を返します。サブクラスは、より意味のある ID を提供するためにオーバーライドできます。
Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.