2011-08-28 49 views
7

加載我使用@ResourceDependency標註在JSF組件的JavaScript和CSS文件添加到我的JSF頁面。獲得一個EL JavaScript文件中,通過@ResourceDependency

在我的JavaScript文件,我需要參考其他資源文件(.swf文件,它位於META-INF /資源,JSF需要)。我試圖在我的javascript代碼中添加一個#{resource['swf:file.swf']} EL表達式,但它不會得到解決。

對於exapmle,在服務器下面的JS文件:

var instance = new JSClass(); 
instance.setResourceUrl("#{resource['swf:file.swf']}"); 

瀏覽器獲得:

var instance = new JSClass(); 
instance.setResourceUrl("#{resource['swf:file.swf']}"); 

這是不對的。

當我在CSS文件中放入相同的EL時,它會得到正確解決。對於服務器中的以下CSS文件:

.instance-css-class { 
    background: url("#{resource['swf:file.swf']}") 
} 

瀏覽器獲得:

.instance-css-class { 
    background: url("/webapp/javax.faces.resource/file.swf.jsf?ln=swf") 
} 

這正是我所需要的,但在JS文件。

很顯然,我可以使用CSS作爲問題的解決方法(創建一個DOM元素的CSS類附加到它,然後讀取和分析所需的樣式屬性)。但是,有沒有更好的方法來實現它?它是JSF庫中的錯誤(我正在使用Mojarra 2.0.3和Jboss 6.1),還是有這種行爲的原因?

請介意上面的代碼是一個標籤庫的一部分,所以不能使用的解決方法,如those


編輯 - 看來,CSS的解決方法是不可行的,因爲我看不到的方式來得到一個CSS文件CSS屬性。因此,任何(工作)解決方法都會很樂意接受。

+0

我剛剛發現,令我驚訝的是,EL是在CSS中評估的。 Mojarra實現使用一個ResourceHelper,它能夠在Faces Resource Request請求的資源內解析EL Expressions。這就是爲什麼我不知道EL是不是在JS文件中評估,因爲它是相同類型的請求。如果任何人都可以闡明這一點,那將是非常棒的。 – tasel

回答

0

BalusC已經回答了詳細here類似的問題。儘管第一種解決方案最容易實施,但我建議您使用第三種解決方案,在我看來,這是正確的方法。