2009-11-29 17 views
11

jsfに外部CSSファイルを追加する構文は何ですか?JSF用外部CSS

両方の方法を試してみました。

1.

<head> 
<style type="text/css"> 
    @import url("/styles/decoration.css"); 
</style> 
</head> 

2.

<head> 
    <link rel="stylesheet" type="text/css" href="/styles/decoration.css" /> 
</head> 

答えて

11

私はBalusCがあなたの答えを持っているかもしれないと思います。

しかし、私はいくつかの追加のポイントを追加したいと思います:

は、Webアプリケーションのサブディレクトリで実行されていると仮定します。 私の経験として、あなたはこれを試してみたいことがあります。 <link href="${facesContext.externalContext.requestContextPath}/css/style.css" rel="stylesheet" type="text/css"/>

'${facesContext.externalContext.requestContextPath}/'リンクを使用すると、コンテキストのルートにすぐに復帰するのに役立ちます。

編集:削除開始/'href="/${facesContext.ex...'から削除されました。アプリケーションがルートコンテキストで実行されている場合、CSS URLは//で始まり、ブラウザはhttp://css/style.cssと解釈されるため、CSSを見つけることができませんでした。

+1

はい、それは私のために働いた - 非常に最初のスラッシュなしで – sergionni

7

私が最初に使用したことがないが、2番目は、構文的に有効であり、技術的に動作するはずです。それが動作しない場合、href属性の相対URLは単に間違っています。

相対URLでは、スラッシュ/がドメインルートを指しています。たとえば、JSFページが例えばhttp://example.com/context/page.jsfでリクエストされている場合、CSS URLは絶対にhttp://example.com/styles/decoration.cssを指します。有効な相対URLを知るには、JSFページとCSSファイルの両方の絶対URLを知り、それを他のURLから抽出する必要があります。

はそれが現在コンテキスト(page.jspの1)に相対的であるように、あなたが先頭のスラッシュを削除する必要があり、あなたのCSSファイルが実際http://example.com/context/styles/decoration.cssに位置していることを推測してみましょう:

<link rel="stylesheet" type="text/css" href="styles/decoration.css" /> 
+0

これは助けにはならなかったので、以下の提案方法も試してみてください。 – sergionni

+0

JSFページとCSSファイルの絶対URLを教えてください。 – BalusC

+0

JSF: C:\サンプル\ SRC \メイン\のWebアプリケーションの\ store.xhtml CSS: C:\サンプル\ SRC \メイン\のWebアプリケーションの\スタイル\ decoration.css – sergionni

3

私はセルジオニの問題は二重であると思います。

最初は、BalusCと同じように、実際にドメイン相対であるので、この例ではhttp://example.com/を基準にしてhttp://example.com/context/には該当しません。

あなたがところで

<link rel="stylesheet" type="text/css" href="${request.contextPath}/styles/decoration.css" /> 

BalusC、お祝いの言葉を指定する必要がありますので、これは私がこれを正しく説明ご覧初めてです!私はこれを発見するためにかなり苦労しました。

しかし、あなたが簡素化したいと提案した場合:

<link rel="stylesheet" type="text/css" href="styles/decoration.css" /> 

は、スタイルdirは、あなたの現在のページのsibblingであると仮定すると、その後は第二の問題持つことができます。

をあなたはそれからにしています相対URLの方法と、私はリダイレクトではなく転送によってこのページに来ました。あなたのブラウザはだまされ、相対パスに従うことができません。

は、この第二の問題を解決するために、あなたはこれを追加する必要があります。

<head> 
    <base href="http://${request.serverName}:${request.serverPort}${request.contextPath}${request.servletPath}" /> 

基本要素のいずれかのリンクに先行しなければなりません。

baseコマンドを使用すると、実際にどこにいるかをブラウザに伝えることができます。

希望します。

そしてこのwondeful JSF世界でところで、別の奇妙な事:そのコンテキストを含むそのにfaceletテンプレート、ルート相対リンクにページからリンクする

は、この時間であり、:

<ui:composition template="/layouts/layout.xhtml"> 

本当にhttp://example.com/context/layouts/layout.xhtml

に及びません<a>または<link>用などのhttp://example.com/layouts/layout.xhtmlに、このリンク。ジャン=マリー・Galliot

+1

''だけで十分です。そして、 "bizzare thing"に関しては、これはFaceletsの動作を文書化したものです。それらは常にコンテキストルートに相対的であり、ドメインルートには相対的ではありません。 – BalusC

+0

コンテキストルートとは何ですか、ドメインルートとは何ですか? –

1

は確かに動作しますあなたのJSF page.ItでCSSをインポートするには、以下のコードを試してみてください。

<style media="screen" type="text/css"> 

    @import "#{facesContext.externalContext.request.contextPath}/css/Ebreez.css" 

</style> 
4

更新されたJSF 2.0メソッドは少し控えめです。代わりに:

<link rel="stylesheet" type="text/css" href="#{request.contextPath}/css/compass.css"/> 

あなたは今、この操作を行います。

<h:outputStylesheet library="css" name="compass.css"/> 

をし、リソースがWEB-INFと同じレベルにある場合は、スタイルシートのリソースはresources\css.に配置する必要があります。

+0

[ここ](http://stackoverflow.com/q/11988415/840977)で説明されているライブラリ属性の適切な使用を念頭に置いて、 – Louise