2013-10-08 17 views
0

我有典型的時尚JSF項目設置:<H:outputStylesheet>和相關資料,

myproject 
    |-- src/main/webapps 
    | |-- resources 
    | | |-- css 
    | | |  |-- 3rdparty.css 
    | | |  
    | | |-- fonts 
    | |   |  
    | |   |-- myspecialfont.woff 
    | |   

然後在我的JSF HTML:

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

這工作得很好,因爲我可以如果我需要升級,請保持目錄一致。

然而,在這種情況下,3rdparty.css文件中包含相對引用:

@font-face { 
    font-family: 'Lato'; 
    src: url('../fonts/myspecialfont.woff'); 
} 

當h:outputStylesheet構建URI使用mywebapp/javax.faces.resource/3rdparty.css這將打破,因爲這條道路里面的相對引用將現請參閱mywebapp/fonts/myspecialfont.woff

有沒有一種很好的方法來保持這些由JSF引用的本地託管的第三方庫來處理這種相對引用而不訴諸手動更改CSS?

+0

嘗試'URL(#{} request.contextPath /資源/字體/ my.woff' – SRy

+0

是的,這會工作,但我試圖避免通過編輯第三方CSS文件保持一個簡單的更新路徑 – TemarV

回答

2

你有兩個選擇:

  1. 不要使用outputStyleSheet,而是在你的模板
  2. 直接包括它修改CSS文件內容(如TemarV建議)

不幸的ISN」因爲資源使用不同的路徑來呈現,其中資源引用被指定爲URL參數,而不是URL的一部分。

編輯:我想突出第三個選項 - 編寫一個自定義的ResourceHandler。我不得不在這些方面做些事情。你可以閱讀更多關於它 -

http://roguexz.blogspot.in/2013/10/jsf-2-returning-resource-url-that-is.html

+0

我想選擇#1,但是然後我失去了確定哪些CSS文件首先加載的能力,因爲h:outputStylesheet會將任何源代碼立即放置在文檔頭部。我自己的CSS需要覆蓋3rdparty.css中的一些類,同時,我現在要走路徑#2。感謝您的輸入。 – TemarV

+0

如果您想要控制頭部中的內容組織部分,我建議你看看primefaces如何爲h:頭添加* first *&* last * facets。也可以幫助您選擇選項1。 –

+0

如果您要使用選項2,那麼您可以使用簡寫符號#{resource ['libraryName:resourceName']}而不是整個contextPath EL。 –