渲染我自己的<script>标记而不是JSF </script>提供的标记

时间:2010-09-28 03:07:40

标签: java jsf tags

我有一些由几个片段组成的页面,在“标题”片段中我有这个标签<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参数 谢谢。
托马斯

2 个答案:

答案 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组件现在都将使用新的渲染器进行渲染。 样式表也是如此,但那些将具有其他渲染类型。