2012-03-29 131 views
4

我試圖在應用程序中的資源周圍進行版本控制。JSF資源版本

如果我做這樣的資源/ JS/1_0_0/mainscript.js

它不工作。它說RESOURCE_NOT_FOUND

但是當我做這樣的

資源/ JS/mainscript.js/1_0_0.js

它的工作原理。我不喜歡它以第二種方式組織的方式。第一個看起來很酷。任何想法?

我使用Tomcat 7.0,JSF 2.0.9

更新:我被檢查primefaces-2-2.1.jar。因爲當我檢查網頁的源文件,我看到這個 /javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces & V = 2.2.1" >

然後我看了一下META-INF /資源/ primefaces/jQuery的/ jquery.js和

他們沒有任何的版本在那裏,但它是怎麼追加v = 2.2.1頭

回答

9

如果我做這樣的資源/ JS/1_0_0/mainscript.js

它不起作用。它說RESOURCE_NOT_FOUND

這將工作,如果您指定js作爲庫名稱。

<h:outputScript library="js" name="mainscript.js" /> 

但是,這不是資源庫的正確用法。而是介紹一個。

resources/default/1_0_0/js/mainscript.js 

然後你可以按如下指定:

<h:outputScript library="default" name="js/mainscript.js" /> 

他們沒有任何的版本在那裏,但它是怎麼在頭追加V = 2.2.1

它完成了PrimeResource哪些腳本對資源請求使用ln=primefaces參數。它getRequestPath()具有以下實現:

@Override 
public String getRequestPath() { 
    return super.getRequestPath() + "&amp;v=" + Constants.VERSION; 
} 

哪裏Constants是一個與每個PF版本更新PrimeFaces具體常量文件。

+0

我明白了,我弄錯了以前的路徑,我有這樣的資源/ js/default/mainscript.js。然後我將其更改爲resources/js/default/1_0_0/mainscript.js,並將其引用爲這樣的,但這不起作用。在看到您的答案後,我將其更改爲resources/js/1_0_0/default/mainscript.js,並且工作正常。謝謝!!這和使用是一樣的嗎?只是庫名稱交換。 – Ravi 2012-03-29 18:29:16

+0

該庫必須表示「主題」/「模塊」,而不是「內容類型」。使用'library =「js」','library =「css」'等是一種氣味,表示對'library'屬性的含義有誤解。 – BalusC 2012-03-29 18:37:54

+0

好的,下次我會記住這一點。謝謝你的見解.. – Ravi 2012-03-29 18:46:10