2012-03-29 98 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