2

and で css ファイルや js ファイルを参照する場合、フォルダ名に「resources」を付ける必要はh:outputStylesheetありh:outputScriptますか?

「resources」ではなく「assets」というフォルダー名を指定すると、これらのファイルが読み込まれません。

これは私がこれらのタグをどのように使用しているかです:

<h:head>
    <h:outputStylesheet name="css/styles.css"/>
    <h:outputScript name="js/site.js"/>
</h:head>

そして、ここに私のプロジェクト構造があります:

ここに画像の説明を入力

スクリーンショットでは、フォルダー名が resources であることがわかります。そして、それは働いています。別の名前を指定するにはどうすればよいですか?

4

3 に答える 3

7

The folder name is fixed as per chapters 2.6.1.1 and 2.6.1.2 of the JSF specification.

2.6.1.1 Packaging Resources into the Web Application Root

The default implementation must support packaging resources in the web application root under the path

resources/<resourceIdentifier>

relative to the web app root. Resources packaged into the web app root must be accessed using the getResource*() methods on ExternalContext.

2.6.1.2 Packaging Resources into the Classpath

For the default implementation, resources packaged in the classpath must reside under the JAR entry name:

META-INF/resources/<resourceIdentifier>

Resources packaged into the classpath must be accessed using the getResource*() methods of the ClassLoader obtained by calling the getContextClassLoader() method of the current Thread.

どちらの場合も「しなければならない」と述べています。これらのパスを変更するための可能な構成オプションについては何も言及されていません。これは、JSF 2.0 と JSF 2.1 の両方に当てはまります。

ただし、今後の JSF 2.2 では、JSF 仕様の問題 996javax.faces.WEBAPP_RESOURCES_DIRECTORYに従って、Web コンテンツ ルートからの相対パスをパラメーター値として取得する新しいコンテキスト パラメーターによってパスを変更できるようになります。

<context-param>
    <param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
    <param-value>WEB-INF/resources</param-value> 
</context-param>

この例では、/resourcesフォルダを に移動します。これにより/WEB-INF、セキュリティが強化されます (つまり、 から独立してこれらのリソースにアクセスすることはできなくなりますFacesServlet)。

特定のケースでは、JSF 2.2 にアップグレードしたときに次の設定を使用したいと考えています。

<context-param>
    <param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
    <param-value>assets</param-value> 
</context-param>

これは、2.6.1.2 章で指定されている JAR リソースではなく、2.6.1.1 章で指定されている webapp 自体のリソースのみを対象とすることに注意してください。JAR リソースのパスはMETA-INF/resources、JSF 仕様ではなく、サーブレット API 仕様によって制御されるため、そのままにしておく必要があります。ServletContext#getResource()つまり、JSFの制御外にあるメソッドによって取得されたカバーの下にあります。

于 2012-12-04T19:15:31.623 に答える
1

これは、リソース ハンドラが JSF 2.0 で実装された方法であり、デフォルトでは次の 2 つのパスを参照します。

1) Web アプリケーションのルートの下にある /resources。

2) クラスパス上の外部 JAR にパッケージ化されている場合は /META-INF/resources。

別の名前を使用する場合は、アレクサンドルが述べたように、タグ<script><style>タグを使用するか、独自のリソース ハンドラーを記述します。

より詳しい情報:

于 2012-12-03T15:38:50.433 に答える