3

JBossAS6.1.0.FinalでJSF2.1とRichFaces4.1を使用しています。今はURLの書き換えに力を入れています。さまざまなアプローチを試した後、PrettyFacesを使用するのは非常に直感的であるため(数分で機能するようになったため)、PrettyFacesを使用することにしました。

難しい問題があります。URLが変更され、相対パスが404になるため、scripts / cssへの相対リンクが混乱しました。絶対パスを使用できますが、多くのページを変更し、ページのソースコードでアプリケーションの構造を公開する必要があります。

私は一時的な回避策について考えています。バッキングBeanに、これらの相対リンクのさまざまなレベルを管理する責任を与えますが、Beanを再利用すると、これは微妙な問題になります。

私の質問は、URLを書き換えるときにこの相対パスを管理するための定義された方法またはベストプラクティスはありますか?

編集

h:outputStylesheetとh:outputScriptは魅力のように機能しました。残っているのは、CSSが相対的な方法で画像を参照する際の小さな問題を解決することだけです。この構造を取る:

-------/resources
       |
       ---_img
       |
       ---_css
       |
       ---_js

フォルダ内のCSSファイルは、相対パスを使用してフォルダ内に_cssある画像を参照します。問題は、で画像が見つからないため、これが404で終わることです。image1.png_img../_img/image1.png/myApp/javax.faces.resource/_img/image1.png

CSS内のすべて../を変更#{request.contextPath}/resourcesすることは問題なく機能するようですが、それを行うためのより良い方法があるかどうか疑問に思います。相対パスアプローチが機能しないのは私には奇妙に思えます。

4

2 に答える 2

5

そもそも、どうやって、なぜ彼らがめちゃくちゃになったのか、私にはわかりません。あなたはそれについてはっきりしていません。ほとんどの場合、JSFが提供するおよび(および)コンポーネントを使用する代わりに、何らかの理由でプレーンHTML<script>および<link>(および)要素をハードコーディングしました。これらのJSFコンポーネントは、フォルダーに相対的なリソース名をとることができ、コンテキストパスの前に自動的にプレフィックスを付けて、リクエスト相対URL(先頭にスラッシュを付けない)ではなく、ドメインに相対するURL(先頭にスラッシュを付ける)になります。スラッシュ)。<img><h:outputScript><h:outputStylesheet><h:graphicImage>/resources

次のフォルダ構造が与えられます(/resourcesフォルダ名は事前に定義されています。名前を変更することはできません)。

WebContent
 |-- resources
 |    |-- css
 |    |    `-- style.css
 |    |-- img
 |    |    `-- logo.png
 |    `-- js
 |         `-- script.js
 |-- page.xhtml
 :

<script>次に、JSFに適切な<link>(および<img>)要素を次のように自動的に生成させることができるはずです。

<h:head>
    <h:outputStylesheet name="css/style.css" />
    <h:outputScript name="js/script.js" />
</h:head>
<h:body>
    <h:graphicImage name="img/logo.png" />
</h:body>

参照:

于 2012-08-08T19:05:11.790 に答える
2

CSSファイルには次のような絶対URLを使用する必要があります。

/path/to/style.css

それ以外の:

../style.css

また、役立つ場合はURLのハードコーディングを避け、JSF2リソース再配置機能を使用することもできます<h:outputStylesheet><h:outputScript>

役立つ可能性のあるいくつかのリンクを次に示します。

http://ocpsoft.org/support/topic/problem-with-prettyfaces-and-primefaces

于 2012-08-08T19:11:06.657 に答える