【问题标题】:JSF resource versioningJSF 资源版本控制
【发布时间】:2012-04-13 08:07:15
【问题描述】:

我正在尝试对应用程序中的资源进行版本控制。

如果我喜欢这个资源/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/resources/primefaces/jquery/jquery.js

他们没有任何版本控制,但它是如何在头部附加 v=2.2.1 的

【问题讨论】:

    标签: jsf tomcat jsf-2 primefaces


    【解决方案1】:

    如果我喜欢这个资源/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 是 PrimeFaces 特定常量文件,每个 PF 版本都会更新。

    【讨论】:

    • 我明白了,我之前弄乱了路径,我有类似资源/js/default/mainscript.js 的东西。然后我将其更改为 resources/js/default/1_0_0/mainscript.js 并将其称为这样的 不起作用。看到您的答案后,我将其更改为 resources/js/1_0_0/default/mainscript.js 并且有效。谢谢!!这与使用 相同,对吗?只是交换了库名。
    • 库必须代表“主题”/“模块”,而不是“内容类型”。使用library="js"library="css"等是一种气味,表示误解了library属性的含义。
    • 请注意,由于 mojarra 中的性能问题,primefaces 在 v3.3 中删除了资源版本控制 - 请参阅 primefaces issue#3705mojarra issue#2494
    • 最高版本的拾取器是否只对战争中的资源有效?我尝试将资源放在 jar 的 META-INF/resources/library/1_0_0/... 文件夹中,并将该 jar 放在我的 WEB-INF/lib 中,但它没有用。将资源从罐子转移到战争中奏效了。此外,将版本作为名称的一部分并将资源保留在 jar 中也很有效。
    猜你喜欢
    • 1970-01-01
    • 2013-08-11
    • 2013-05-30
    • 2018-07-21
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    相关资源
    最近更新 更多