1

omn ​​ifacesの UnmappedResourceHandlerに出くわしたとき、JSF 2 でカスタム リソース ハンドラーを調べていました。これは、この投稿の後に Omnifaces に追加されました。

Omnifaces が提供する他の 2 つの ResourceHandlers とは異なり、. CDNResourceHandlerおよびCombinedResourceHandler、これには、JSF リソース URL プレフィックス パターンの追加のマッピングが必要です。

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
    <url-pattern>/javax.faces.resource/*</url-pattern>
</servlet-mapping>

私はJSFの専門家ではありませんが、なぜこれがこのタイプにのみ必要で、他の2つには必要でないのか知りたいです?

4

1 に答える 1

1

JSF リソースも、 によって提供される必要がありますFacesServlet。これは、フォルダー内の適切なファイルを見つけて/resources、適切なキャッシュ ヘッダーと共に返す役割を果たします。.xhtmlリソース URL から拡張子 (またはパス)を削除する/facesと、URL は の URL パターンと一致しなくなるFacesServletため、FacesServletは呼び出されず、リソースを提供するジョブを実行できなくなります。「生の」リソース URL がパブリック Web コンテンツ フォルダー構造と一致しないため、404 Not Found エラーが返されるだけです。

UnmappedResourceHandler/javax.faces.resourceで識別されるように、JSF リソース URL には共通のプレフィックス パスがあるという事実を利用しますResourceHandler.RESOURCE_IDENTIFIER。したがって、拡張子 (またはパス)FacesServletがなくてもとにかく呼び出すには、 URL パターンをマッピングに追加するだけです。.xhtml/faces/javax.faces.resource/*

CDNResourceHandlerいずれにしても JSF リソース URL を生成しないため、マッピングを変更する必要はありませんが、jQuery または Google CDN ホストを指すような真の CDN URL を生成します。FacesServletとにかく、これらの URL はヒットしない (ヒットする必要がない) でしょう。

は、拡張子 (またはパス)CombinedResourceHandlerを含むデフォルトの JSF リソース URL を生成するだけです。がそれらを識別できるように、の特別な名前のみを使用します。.xhtml/faceslibraryomnifaces.combinedCombinedResourceHandler

于 2014-08-16T20:41:37.223 に答える