我有一些由几个片段组成的页面,在“标题”片段中我有这个标签<webuijsf:script id="script_logo" url="/resources/logo.js"/>
。这在HTML中呈现为<script src="/app/resources/logo.js" type="text/javascript" id="Header:script_logo"></script>
。这很好,它按预期工作。现在我需要以某种方式强制JSF将URL返回到当前版本的app的javascript。这是用于在客户端兑现资源的情况下强制重新加载资源(javascript,css和图像)的已知技术。我需要渲染像<script src="/app/resources/logo.js?ver=1.0.405" type="text/javascript" id="Header:script_logo"></script>
这样的东西。请注意网址中的ver
参数
谢谢。
托马斯
答案 0 :(得分:2)
好吧,您只需将其添加到页面中即可:
<script src="/app/resources/logo.js?ver=#{commonBean.version}" ...>
我假设您希望版本可由服务器配置和发送,因此commonBean
是一些返回正确版本的jsf bean。
更新:同时查看<rich:loadScritp>
。 (来自RichFaces)
最后一个选项是创建自己的组件并自动包含该版本。寻找如何制作它的教程,这对JSF 1.2来说并不容易。
答案 1 :(得分:0)
那很容易。 JSF 2使用配置将渲染器绑定到组件。 因此,您需要一个组件系列和一个渲染器类型。现在你可以在你的中定义 faces-config.xml该家族和渲染器类型的渲染器。
在Mojorra中,为outputScript-Component设置了以下配置:
<renderer>
<component-family>javax.faces.Output</component-family>
<renderer-type>javax.faces.resource.Script</renderer-type>
<renderer-class>com.sun.faces.renderkit.html_basic.ScriptRenderer</renderer-class>
</renderer>
我必须承认,这些信息来自我的调试。我调试了ScriptRenderer 并且能够从UIComponent获取组件系列和渲染器类型。
现在,如果您为该Component使用其他渲染器,只需更改配置即可 并且原件将被覆盖:
<renderer>
<component-family>javax.faces.Output</component-family>
<renderer-type>javax.faces.resource.Script</renderer-type>
<renderer-class>your.own.renderer.class</renderer-class>
</renderer>
不要忘记,所有h:outputScript组件现在都将使用新的渲染器进行渲染。 样式表也是如此,但那些将具有其他渲染类型。