我有一个“/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 方法可以达到预期的效果?
答案 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中。