从jsf应用程序提供javascript / jsf资源

时间:2011-08-27 14:21:04

标签: javascript file jsf richfaces

我有一个“/js/ajax-error.js”文件,我将以“richfaces方式”提供,如下所示:“/ js / ajax-error.js.jsf”所以我在我的js文件中使用了那种jsf变量:“#{facesContext.externalContext.requestContextPath}”

这可能吗?我尝试使用xhtml为我的js文件添加前缀:它不起作用。

我使用richfaces + jsf 2.0 + servlet 3.0

有人可以帮忙吗?

(已添加)是否有一种干净的 JSF 方法可以达到预期的效果?

2 个答案:

答案 0 :(得分:1)

有可能这样做,但我强烈建议你不这样做。保持您的JavaScript清洁和可缓存。

用于安排可用于JavaScript的服务器端数据的常见模式是将值放入HTML的适当部分的“data-”属性中。例如,“全局”信息(例如,关于用户会话的内容,如用户名,公司名称等)可以附加到<body>

<body data-username='John Phillip Sousa' data-registered='05 Jul 1903'>

现在JavaScript可以通过从<body>标记中获取数据属性来查找用户名和注册日期。像这样编辑

var body = document.getElementsByTagName('body')[0];
var username = body.getAttribute("data-username");
var registrationDate = body.getAttribute("data-registered");

答案 1 :(得分:0)

如果您的唯一目的是以“Richfaces方式”(实际上是JSF 2.0方式)提供服务,那么请使用<h:outputScript>。将文件放在公共webcontent的/resources/js/ajax-error.js中(主路径/resources是必需的,其名称不能更改)。然后参考如下:

<h:outputScript name="js/ajax-error.js" />

无论其在模板中的位置如何,都会生成HTML <head>,如下所示,假设您的FacesServlet已映射到*.jsf

<script type="text/javascript" src="/contextname/javax.faces.resource/js/ajax-error.js.jsf"></script>

但是这不能为你提供EL支持!您将无法在该脚本中使用#{}。只有在<h:outputStylesheet>包含的样式表中才支持#{},以便以JSF 2.0 #{resource['logo.png']}的方式定位背景图片,但仅此而已。

在您的特定情况下,我宁愿在HTML #{facesContext.externalContext.requestContextPath}标记或某些全局JS变量或HTML {中引用#{request.contextPath}(或更短且更受欢迎的对应<base>) {1}}属性。如果设置为data,则所有相对链接都将相对于它,也在JS中。

另见: