2011-09-11 28 views
5

JSF 2.0 Faceletsアプリケーションでは、すべてのページに使いたい栄光のテンプレートが1つあります。これは、template.xhtmlという名前で装飾されたweb-appのルートディレクトリにあります。したがって、それは期待どおりに参照されています:リソースを取得するためのテンプレート内の絶対パス名

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

しかし私は今、次にサブディレクトリのクライアントファイルに移動します。特権レベルが異なるため、このように整理すると便利です。これらのサブディレクトリのフェイスレットは、次のような同じテンプレートへの参照を持っています:

これまでのところとても良いです。しかし、私はこのようなCSSで引っ張っテンプレートのヘッダーに:

<link href="./resources/css/default.css" rel="stylesheet" type="text/css" /> 
<link href="./resources/css/tableLayout.css" rel="stylesheet" type="text/css" /> 
<link href="../resources/css/default.css" rel="stylesheet" type="text/css" /> 
<link href="../resources/css/tableLayout.css" rel="stylesheet" type="text/css" /> 

冗長言及した理由は、私は根の文脈から作業するテンプレートを取得する他の方法を発見していないということですディレクトリまたはサブディレクトリに移動します。 /で始まるパス名は、あなたがこの

/TheApp-Ver1_0/resources/css/default.css 

みたいにアプリケーション名を入れない限り、これに伴う問題は、絶対パス名が変数ではなく定数で始まるということです動作しません。変数は、アプリケーションがコンテナにどのように展開されているかによって異なります。これを解決する明確な方法はありますか?

私はこの質問を見つけるためにいくつかの検索を行いました。正直。しかし、私はこれがだと思われます。 BalusCが盛り上がっているのは、私が見逃していたどこかで徹底的に議論されている驚異的な解決策へのリンクです。

答えて

14

<ui:composition>templateパスは、webappの独自のフォルダ構造に関連しており、ドメインルートではありません(URLを表していないため!)。だから、/で始めると、それはコンテキストルートに関連して解決されただけです。

<ui:composition template="/WEB-INF/inc/template.xhtml"> 

/WEB-INFに置くことはエンドユーザーがURLを推測して、それを直接開くことができないという利点があり)

<h:outputStylesheet><h:outputScript><h:graphicImage>nameパスは、常に/resourcesルートフォルダに相対的であるにかかわらず、あなたが/で始まるかどうかを確認してください。

<h:outputStylesheet name="css/default.css" /> 
<h:outputScript name="js/default.js" /> 
<h:graphicImage name="img/logo.png" /> 

あなたには、いくつかの理由のためのCSS/JS /画像を含む代わりにJSFコンポーネントのプレーンなHTMLを使用したい場合は、最高のは、あなたがそれドメイン相対作ることができるように、#{request.contextPath}を自分でパスを付加することですURLを使用して、コンテキストに関連するURLを試す必要はありません。他にも:How get the base URL?

+0

もう一度やりました。私は、これらのタグがまだここに記載されているオンライン参考文献の一部に含まれていないことに気づきます:http://stackoverflow.com/questions/539041/whats-the-best-online-reference-for-jsf-tags – AlanObject

+1

JSF 2.xで変更されました(2009年下半期に導入されました)。あなたが言及したリンクは2009年2月のもので、JSF 1.xのドキュメントのみを参照しています。すべてのJSF 2.xタグについては、JSF 2.xのドキュメントを参照してください。http://download.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/ JSF 2.xを使用する場合は、 JSF 2.xのチュートリアル/書籍/ドキュメント/解答を読んでいます。 – BalusC

+0

したがって、リソースフォルダにないcssまたはjsファイルを参照する機会はありませんか?このmyhost/resources/partials/my.cssのようなブラウザからjs/cssリソースに到達することはできませんか? – ses