パッケージ jakarta.faces.application

クラス ResourceHandler

java.lang.ObjectSE
jakarta.faces.application.ResourceHandler
既知の直属サブクラス
ResourceHandlerWrapper

public abstract class ResourceHandler extends ObjectSE

ResourceHandler は、UIComponent および Renderer インスタンス、および ViewDeclarationLanguageResource インスタンスを参照できるランタイム API です。このクラスの実装はスレッドセーフでなければなりません。

パッケージングリソース

ResourceHandler は、リソースのパスベースのパッケージ化規則を定義します。ResourceHandler のデフォルトの実装は、クラスパスまたは Web アプリケーションルートでのリソースのパッケージ化をサポートする必要があります。パッケージングリソースの規範的な仕様については、Jakarta Faces Specification Document のセクション 2.6.1「パッケージングリソース」を参照してください。

簡単に言えば、デフォルトの実装は、パスの Web アプリケーションルートでパッケージ化リソースをサポートする必要があります

resources/<resourceIdentifier>

Web アプリのルートに対して相対的です。「リソース」はデフォルトの場所ですが、この場所は WEBAPP_RESOURCES_DIRECTORY_PARAM_NAME <context-param> の値によって変更できます

デフォルトの実装では、クラスパスにパッケージ化されたリソースは JAR エントリ名に存在する必要があります

META-INF/resources/<resourceIdentifier>

jar ファイル内にパッケージ化された Faces Flow の場合、クラスパスにパッケージ化されたリソースは jar エントリ名に存在する必要があります

META-INF/flows/<resourceIdentifier>

<resourceIdentifier> は、次のように指定されたいくつかのセグメントで構成されています。

[localePrefix/][libraryName/][libraryVersion/]resourceName[/resourceVersion]

resourceIdentifier 内のセグメントはいずれも、"../otherLibraryName" などの相対パスであってはなりません。実装では、JAR パッケージ化の場合、libraryVersion および resourceVersion セグメントをサポートする必要はありません。

必須のセグメントは resourceName のみであることに注意してください。

エンコーディングリソース

ビューリクエストの処理中に、Jakarta Server Face ランタイムが呼び出されて、後続のリソースリクエストを行うようにユーザーエージェントに指示するような方法でリソースをエンコードすることができます。この動作は、リソースレンダラーの 1 つ(ScriptRendererStylesheetRendererImageRenderer)によって調整されます。ScriptRendererStylesheetRendererImageRenderer はすべて Resource.getRequestPath() を呼び出して、リソースのエンコードされた URI を取得します。完全な仕様については、Resource.getRequestPath() および標準 HTML RenderKit 仕様を参照してください。

このリソースの使用は、VDL リソースに対応するリソースには適用されません。

リソースのデコード

リソースリクエストの処理中に、Jakarta Faces ランタイムが呼び出され、リソースのバイトをユーザーエージェントに提供するようにリソースをデコードします。この動作は、Resource.getInputStream() を呼び出してリソースのバイトを取得する handleResourceRequest(jakarta.faces.context.FacesContext) によって調整されます。完全な仕様については、handleResourceRequest(jakarta.faces.context.FacesContext) を参照してください。

このリソースの使用は、VDL リソースに対応するリソースには適用されません。

導入:
2.0
  • フィールドの詳細

    • RESOURCE_IDENTIFIER

      public static final StringSE RESOURCE_IDENTIFIER

      Resource.getRequestPath() は、この定数の値を URI のプレフィックスとして返します。handleResourceRequest(jakarta.faces.context.FacesContext) は、リクエスト URI 内でこの定数の値を検索して、リクエストがリソースリクエストであるかビューリクエストであるかを判別します。

      関連事項:
    • JSF_SCRIPT_RESOURCE_NAME

      @DeprecatedSE(since="4.0", forRemoval=true) public static final StringSE JSF_SCRIPT_RESOURCE_NAME
      非推奨、削除予定: この API 要素は、将来のバージョンで削除される可能性があります。
      代わりに FACES_SCRIPT_RESOURCE_NAME を使用してください。

      Jakarta Faces スクリプトリソースのリソース名。

      導入:
      2.3
      関連事項:
    • FACES_SCRIPT_RESOURCE_NAME

      public static final StringSE FACES_SCRIPT_RESOURCE_NAME

      Jakarta Faces スクリプトリソースのリソース名。

      導入:
      2.3
      関連事項:
    • JSF_SCRIPT_LIBRARY_NAME

      @DeprecatedSE(since="4.0", forRemoval=true) public static final StringSE JSF_SCRIPT_LIBRARY_NAME
      非推奨、削除予定: この API 要素は、将来のバージョンで削除される可能性があります。
      代わりに FACES_SCRIPT_LIBRARY_NAME を使用してください。

      Jakarta Faces スクリプトリソースのライブラリ名。

      導入:
      2.3
      関連事項:
    • FACES_SCRIPT_LIBRARY_NAME

      public static final StringSE FACES_SCRIPT_LIBRARY_NAME

      Jakarta Faces スクリプトリソースのライブラリ名。

      導入:
      2.3
      関連事項:
    • RESOURCE_CONTRACT_XML

      public static final StringSE RESOURCE_CONTRACT_XML

      このファイルは、リソースライブラリ契約を含む jar ファイルの META-INF/contracts/<contractName>/ に配置する必要があります。<contractName> は契約の名前です。jar ファイルに複数の契約が含まれている場合は、マーカーファイルがそれぞれに存在する必要があります。その場所に配置する必要のあるファイルの名前については、「定数フィールド値」を参照してください。

      導入:
      2.2
      関連事項:
    • WEBAPP_RESOURCES_DIRECTORY_PARAM_NAME

      public static final StringSE WEBAPP_RESOURCES_DIRECTORY_PARAM_NAME

      WEBAPP_RESOURCES_DIRECTORY_PARAM_NAME の値と等しいパラメーター名を持つ <context-param> が存在する場合、ランタイムはその値を、リソースが配置される Web アプリルートを基準としたパスとして解釈する必要があります。このパラメーター値は "/" で始まることはできませんが、"/" 文字が含まれている場合があります。そのような <context-param> が存在しない場合、またはその値が無効な場合は、引用符なしの値 "resources" をランタイムで値として使用する必要があります。

      導入:
      2.2
      関連事項:
    • WEBAPP_CONTRACTS_DIRECTORY_PARAM_NAME

      public static final StringSE WEBAPP_CONTRACTS_DIRECTORY_PARAM_NAME

      WEBAPP_CONTRACTS_DIRECTORY_PARAM_NAME の値と等しいパラメーター名を持つ <context-param> が存在する場合、ランタイムはその値を、リソースライブラリ契約が配置される Web アプリルートを基準としたパスとして解釈する必要があります。このパラメーター値は "/" で始まることはできませんが、"/" 文字が含まれている場合があります。そのような <context-param> が存在しない場合、またはその値が無効である場合、値 "contracts" は、引用符なしで、ランタイムによって値として使用される必要があります。

      導入:
      2.2
      関連事項:
    • LOCALE_PREFIX

      public static final StringSE LOCALE_PREFIX

      Application.getMessageBundle() からの戻り値で指定されたアプリケーションメッセージバンドル内のキーの名前。その値は、createResource(java.lang.String)(またはそのバリアントの 1 つ)から返すパッケージ化されたリソースを見つけるために使用されるロケールプレフィックスです。

      関連事項:
    • RESOURCE_EXCLUDES_PARAM_NAME

      public static final StringSE RESOURCE_EXCLUDES_PARAM_NAME

      handleResourceRequest(jakarta.faces.context.FacesContext) が参照する ServletContext init パラメーターは、リソースリクエストにレスポンスして決して提供されてはならないリソースの種類を示します。このパラメーターの値は、先頭の "." を含む、ファイル拡張子の単一のスペースで区切られたリストです。文字(引用符なし)。指定しない場合、RESOURCE_EXCLUDES_DEFAULT_VALUE 定数の値で指定されたデフォルト値が使用されます。手動で指定した場合、指定された値はデフォルトの値を完全に上書きし、補足しません。

      関連事項:
    • RESOURCE_EXCLUDES_DEFAULT_VALUE

      public static final StringSE RESOURCE_EXCLUDES_DEFAULT_VALUE

      RESOURCE_EXCLUDES_PARAM_NAME init param のデフォルト値。

      関連事項:
  • コンストラクターの詳細

    • ResourceHandler

      public ResourceHandler()
  • メソッドの詳細

    • createResource

      public abstract Resource createResource(StringSE resourceName)

      引数 resourceName を指定して ViewResource のインスタンスを作成します。リソースのコンテンツ型は、resourceNameExternalContext.getMimeType(java.lang.String) に渡すことによって導出されます。

      Jakarta Faces Specification Document のセクション 2.6.1.4「ローカライズおよびバージョン管理されたリソースの ライブラリ」で指定されたアルゴリズムを実行して、Resource を作成する必要があります。新しい要件は、仕様のバージョン 2.2 で導入されました。歴史的な理由から、このメソッドは、引数 resourceName が libraryName/resourceName の形式の場合、resourceName に "/" 文字が含まれている場合でも正しく動作します。

      パラメーター:
      resourceName - リソースの名前。
      戻り値:
      新しく作成された Resource インスタンス。指定されたリソースのエンコードまたはデコードでの使用に適しています。
      例外:
      NullPointerExceptionSE - resourceName が null の場合。
    • createViewResource

      public ViewResource createViewResource(FacesContext context, StringSE resourceName)

      引数 resourceName を指定して Resource のインスタンスを作成します。これには、"/" 文字を含めることができます。ViewDeclarationLanguage は、ファイルシステムなどの永続ストアからビューをロードする必要がある場合にこのメソッドを呼び出します。このメソッドは createResource(java.lang.String) と同等の機能ですが、VDL ビューをロードする必要があるすべてのコールサイトはこのメソッドを使用する必要があります。これにより、ビューのロードのみに影響を与えるために ResourceHandler を装飾するクラスは、他の種類の処理に影響を与えることなくそうすることができます。スクリプトやスタイルシートなどのリソース。このメソッドを呼び出す前に、FacesContext が存在している必要があります。仕様の以前のリビジョンとの互換性を維持するには、createResource(java.lang.String) を呼び出すデフォルトの実装を提供する必要があります。

      デフォルトの実装では、次の場所でこの順序でリソースを検索する必要があります。

      • リソースライブラリ契約の検討 (Jakarta Faces Specification Document セクション 2.7 " リソースライブラリ契約 " で指定された場所)。

      • Web アプリのルートを検討します。

      • Faces フローを考慮します (Jakarta Faces Specification Document セクション 11.3.3 "Faces Flows" で指定された場所で)。

      FacesContext.getResourceLibraryContracts() を呼び出します。結果が非 null で空でない場合は、リスト内の各値について、その値をリソースライブラリ契約の名前として扱います。引数 resoureName がリソースライブラリ契約のリソースとして存在する場合は、それを返します。それ以外の場合は、見つかった場合は、リソース(リソースライブラリ契約にない)を返します。それ以外の場合は、null を返します。

      パラメーター:
      context - このリクエストの FacesContext
      resourceName - ViewDeclarationLanguage によってビューとして解釈されるリソースの名前。
      戻り値:
      新しく作成された ViewResource インスタンス。ViewDeclarationLanguage での使用に適しています。
      例外:
      NullPointerExceptionSE - resourceName が null の場合。
      導入:
      2.2
    • getViewResources

      public StreamSE<StringSE> getViewResources(FacesContext facesContext, StringSE path, int maxDepth, ResourceVisitOption... options)

      指定された初期パスをルートとするリソースツリーをウォークすることにより、おそらく遅延して入力された Stream を返します。リソースツリーは幅優先でトラバースれます。ストリーム内の要素は、resourceName パラメーターとして createViewResource(jakarta.faces.context.FacesContext, java.lang.String) に渡されたときに ViewResource を生成するビューリソース名です。

      maxDepth パラメーターは、常にアクセスされる初期パスを超えてアクセスするディレクトリレベルの最大深度です。値は、指定された初期パスではなく、ルート(/)を基準にしています。たとえば、maxDepth = 3 および初期パス /foo/ が与えられた場合、訪問は /foo/bar/ まで進みます。ここで、/ は深さ 1 としてカウントされ、/foo/ は深さ 2 としてカウントされ、/foo/bar/ は深さ 3 としてカウントされます。初期パスの深さ以下の値は、初期パスのみが訪問されることを意味します。MAX_VALUESE の値を使用して、すべてのレベルにアクセスする必要があることを示すことができます。

      パラメーター:
      facesContext - このリクエストの FacesContext
      path - ビューリソースの検索を開始する最初のパス
      maxDepth - ルート(/)から数えた、アクセスするネストされたディレクトリの絶対最大深度。
      options - トラバーサルに影響を与えるオプション。これらの詳細については、ResourceVisitOption を参照してください。
      戻り値:
      ビューリソース名の StreamSE
      導入:
      2.3
    • getViewResources

      public StreamSE<StringSE> getViewResources(FacesContext facesContext, StringSE path, ResourceVisitOption... options)

      指定された初期パスをルートとするリソースツリーをウォークすることにより、おそらく遅延して入力された Stream を返します。リソースツリーは幅優先でトラバースれます。ストリーム内の要素は、resourceName パラメーターとして createViewResource(jakarta.faces.context.FacesContext, java.lang.String) に渡されたときに ViewResource を生成するビューリソース名です。

      このメソッドは、それを呼び出すことは式を評価することと同等であるかのように機能します。

       getViewResources(facesContext, start, Integer.MAX_VALUE, options)
       
      言い換えると、リソースツリーのすべてのレベルにアクセスします。
      パラメーター:
      facesContext - このリクエストの FacesContext
      path - ビューリソースの検索を開始する最初のパス
      options - トラバーサルに影響を与えるオプション。これらの詳細については、ResourceVisitOption を参照してください。
      戻り値:
      ビューリソース名の StreamSE
      導入:
      2.3
    • createResourceFromId

      public Resource createResourceFromId(StringSE resourceId)

      引数 resourceId を指定して Resource のインスタンスを作成します。リソースのコンテンツ型は、resourceNameExternalContext.getMimeType(java.lang.String) に渡すことによって導出されます。

      リソースは、Jakarta Faces Specification Document のセクション 2.6.1.3「リソース識別子」の仕様に従って識別する必要があります。仕様のバージョン 2.2 で新しい要件が導入されました。

      パラメーター:
      resourceId - リソースのリソース識別子。
      戻り値:
      新しく作成された Resource インスタンス。指定されたリソースのエンコードまたはデコードでの使用に適しています。
      例外:
      NullPointerExceptionSE - resourceId が null の場合。
      導入:
      2.2
    • createResource

      public abstract Resource createResource(StringSE resourceName, StringSE libraryOrContractName)

      引数 libraryName で指定されたライブラリのメンバーである引数 resourceName の値によって指定された resourceName を使用して、Resource のインスタンスを作成します。リソースのコンテンツ型は、resourceNameExternalContext.getMimeType(java.lang.String) に渡すことによって導出されます。

      Jakarta Faces Specification Document のセクション 2.6.1.4「ローカライズおよびバージョン管理されたリソースの ライブラリ」で指定されたアルゴリズムを実行して、Resource. 新しい要件は、仕様のバージョン 2.2 で導入されましたを作成する必要があります。

      パラメーター:
      resourceName - リソースの名前。
      libraryOrContractName - このリソースが存在するライブラリ (または契約) の名前は null の場合があります。リソースライブラリの名前とリソースライブラリ契約が競合する場合は、リソースライブラリが優先されます。"../" などの相対パスを含めることはできません
      戻り値:
      新しく作成された Resource インスタンス。指定されたリソースのエンコードまたはデコードでの使用に適しています。
      例外:
      NullPointerExceptionSE - resourceName が null の場合
    • createResource

      public abstract Resource createResource(StringSE resourceName, StringSE libraryName, StringSE contentType)

      引数 content-type によって指定されたコンテンツ型を持つと主張する引数 libraryName によって指定されたライブラリのメンバーである引数 resourceName の値によって指定された resourceName を使用して、Resource のインスタンスを作成します

      Jakarta Faces Specification Document のセクション 2.6.1.4「ローカライズおよびバージョン管理されたリソースの ライブラリ」で指定されたアルゴリズムを実行して、Resource. 新しい要件は、仕様のバージョン 2.2 で導入されましたを作成する必要があります。

      パラメーター:
      resourceName - リソースの名前。
      libraryName - このリソースが存在するライブラリの名前。null の場合があります。 "../" などの相対パスを含めることはできません
      contentType - この Resource インスタンスが Resource.getContentType() から返す MIME コンテンツ。値が null の場合、リソースのコンテンツ型は resourceNameExternalContext.getMimeType(java.lang.String) に渡すことによって導出されます。
      戻り値:
      新しく作成された Resource インスタンス。指定されたリソースのエンコードまたはデコードでの使用に適しています。
      例外:
      NullPointerExceptionSE - resourceName が null の場合。
    • libraryExists

      public abstract boolean libraryExists(StringSE libraryName)

      引数 libraryName で指定されたリソースライブラリが見つかった場合は、true を返しますLOCALE_PREFIX で定義されているように、このアプリケーションに localePrefix がある場合は、最初にプレフィックス付きのライブラリを検索します。そのようなライブラリが見つからない場合は、プレフィックスなしのライブラリを検索します。これにより、開発者はファイルの重複を回避できます。例: 開発者が、ローカライズされたイメージリソースとローカライズされていないスクリプトリソースを含むリソースライブラリを必要とする場合を考えてみましょう。ライブラリの存在について両方の場所をチェックし、Jakarta Faces Specification Document のセクション 2.6.1.4「ローカライズおよびバージョン管理されたリソースの ライブラリ」のその他の仕様変更を行うことで、このシナリオが有効になります

      パラメーター:
      libraryName - ライブラリ名。
      戻り値:
      ライブラリが存在する場合は true、それ以外の場合は false
      導入:
      2.0
    • handleResourceRequest

      public abstract void handleResourceRequest(FacesContext context) throws IOExceptionSE

      このメソッドは、リソースリクエストを満たすための契約を指定します。このメソッドは、isResourceRequest(jakarta.faces.context.FacesContext) を呼び出すことにより、現在のリクエストがリソースリクエストであると判断した後、FacesServlet.service(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) から呼び出されます。handleResourceRequest は、現在のリクエストがリソースリクエストであると想定する場合があります。

      デフォルトの実装では、次のアルゴリズムと意味的に同一のアルゴリズムを実装する必要があります。

      議論のために、ステータスコードが設定されるすべての場合において、この仕様は Jakarta Servlet API のみを使用して話しますが、ポートレット環境では適切な同等の API を使用する必要があることを理解しています。
      パラメーター:
      context - このリクエストの FacesContext
      例外:
      IOExceptionSE - I/O エラーが発生したとき。
    • isResourceRequest

      public abstract boolean isResourceRequest(FacesContext context)

      現在のリクエストがリソースリクエストの場合は、true を返します。このメソッドは FacesServlet.service(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse) によって呼び出され、このリクエストがビューリクエストであるリソースリクエストであるかを判別します。

      パラメーター:
      context - このリクエストの FacesContext
      戻り値:
      現在のリクエストがリソースリクエストの場合は true、それ以外の場合は false
    • isResourceURL

      public boolean isResourceURL(StringSE url)

      引数 url に定数 RESOURCE_IDENTIFIER の値で指定された文字列が含まれている場合は、true を返します。それ以外の場合は、false を返します。

      パラメーター:
      url - RESOURCE_IDENTIFIER の存在をインスペクションする URL。
      戻り値:
      これがリソース URL の場合は true、それ以外の場合は false
      例外:
      NullPointerExceptionSE - 引数の URL が null の場合。
    • getRendererTypeForResourceName

      public abstract StringSE getRendererTypeForResourceName(StringSE resourceName)

      このリソースをレンダリングできる Renderer の renderer-type を返します。デフォルトの実装は、次の表に従って値を返す必要があります。renderer-type を判別できない場合は、null を返却する必要があります。

      レンダラー型のマッピングへのリソース名
      リソース名の例 renderer-type
      mycomponent.jsjakarta.faces.resource.Script
      mystyle.cssjakarta.faces.resource.Stylesheet
      パラメーター:
      resourceName - リソース名。
      戻り値:
      レンダラーの型。
    • markResourceRendered

      public void markResourceRendered(FacesContext context, StringSE resourceName, StringSE libraryName)

      指定されたリソースとライブラリ名で識別されるリソースをレンダリング済みとしてマークします。デフォルトの実装では、現在のビューのレンダリングレスポンスフェーズ中にリソースがすでにレンダリングされている場合に、isResourceRendered(FacesContext, String, String) が true を返すようにする必要があります。

      パラメーター:
      context - このリクエストの FacesContext
      resourceName - リソースの名前。
      libraryName - リソースが存在するライブラリの名前は、null の場合があります。
      導入:
      2.3
    • isResourceRendered

      public boolean isResourceRendered(FacesContext context, StringSE resourceName, StringSE libraryName)

      指定されたリソースとライブラリ名で識別されるリソースがレンダリングされているかどうかを返します。デフォルトの実装では、リソースが markResourceRendered(FacesContext, String, String) を介してレンダリングされたとマークされている場合、現在のビューのレンダリングレスポンスフェーズで true を返す必要があります。

      パラメーター:
      context - このリクエストの FacesContext
      resourceName - リソースの名前。
      libraryName - このリソースが存在するライブラリの名前は、null の場合があります。
      戻り値:
      指定されたリソースとライブラリ名で識別されるリソースがレンダリングされているかどうか。
      導入:
      2.3