質問
外部CSSファイルをjsfに追加する構文は何ですか?
両方の方法で試してみましたが、助けにはなりませんでした。
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>
解決
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を見つけることができませんでした。
他のヒント
前者を使用したことはありませんが、後者は構文的に有効であり、技術的に機能するはずです。動作しない場合は、href
属性の相対URLが間違っています。
相対URLでは、先頭のスラッシュ/
はドメインルートを指します。そのため、たとえばJSFページがhttp://example.com/context/page.jsf
によって要求された場合、CSS URLは絶対にhttp://example.com/styles/decoration.css
を指します。有効な相対URLを知るには、JSFページとCSSファイルの両方の絶対URLを知り、一方を他方から抽出する必要があります。
CSSファイルが実際にhttp://example.com/context/styles/decoration.css
にあると推測してから、先頭のスラッシュを削除して、 current コンテキスト(page.jsp
の1つ)に関連するようにします:
<link rel="stylesheet" type="text/css" href="styles/decoration.css" />
更新されたJSF 2.0メソッドは少し整然としています。代わりに:
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/css/compass.css"/>
これを行う:
<h:outputStylesheet library="css" name="compass.css"/>
およびスタイルシートリソースはresources\css.
に配置する必要があります。リソースはWEB-INFと同じレベルにあります。
セルギオーニの問題は2つあると思います。
まず、BalusCが言ったように、いわゆるルート相対は実際にはドメイン相対であるため、例ではhttp://example.com/
ではなくhttp://example.com/context/
に相対的であることは事実です。
したがって、指定する必要があります
<link rel="stylesheet" type="text/css" href="${request.contextPath}/styles/decoration.css" />
BTW BalusC、おめでとう、これは私がこれが正しく説明されているのを見るのは初めてです!これを見つけるのにかなり苦労しました。
ただし、単純化して提案する場合:
<link rel="stylesheet" type="text/css" href="styles/decoration.css" />
スタイルdirが現在のページの兄弟であると仮定すると、2番目の問題が発生する可能性があります:
その後、相対URLメソッドに入りますが、リダイレクトではなく転送でこのページにアクセスした場合、ブラウザがだまされて相対パスをたどることができません。
この2番目の問題を解決するには、これを追加する必要があります:
<head>
<base href="http://${request.serverName}:${request.serverPort}${request.contextPath}${request.servletPath}" />
ベース要素は、すべてのリンクの前にある必要があります。
baseコマンドにより、ブラウザに実際の場所を伝えます。
お役に立てば幸いです。
そして、このすばらしいjsfの世界でのもう1つの奇妙なことです:
ページからそのfaceletテンプレート、今度はコンテキストを含むルート相対リンクISにリンクします:
<ui:composition template="/layouts/layout.xhtml">
これは本当にhttp://example.com/context/layouts/layout.xhtml
http://example.com/layouts/layout.xhtml
または<a>
のように、<link>
ではなく<=>に。
ジャンマリーガリオット
jsfページにcssをインポートするには、以下のコードを試してください。確実に動作します。
<style media="screen" type="text/css">
@import "#{facesContext.externalContext.request.contextPath}/css/Ebreez.css"
</style>