【问题标题】:Access JSF resource from javascript从 javascript 访问 JSF 资源
【发布时间】:2015-05-08 18:35:41
【问题描述】:

我想通过以下 javascript 函数访问 JSF 资源(在 WebPages/resources/img 下):

function hideSpinner() {
    arguments[i].poster = './img/sppiner.png';
}

我尝试过arguments[i].poster = "${resource['img/sppiner.png']}";arguments[i].poster = '${resource[\'img/sppiner.png\']}';,但它不起作用..

我能做什么?

【问题讨论】:

  • 试试#{request.contextPath}/resources/img/sppiner.png。如果您的 javascript 函数位于 facelet 页面中,它将起作用。

标签: javascript jsf jsf-2


【解决方案1】:

EL 表达式仅在 Facelets (XHTML) 文件和通过 <h:outputStylesheet> 加载的 CSS 文件中进行评估。它们不会在通过 <h:outputScript> 加载的 JS 文件中进行评估。

您基本上需要渲染一个内联脚本,该脚本设置一个(全局)JavaScript 变量,JS 文件应该依次引用该变量。

<h:outputScript>var spinnerImage = "${resource['img/sppiner.png']}";</h:outputScript>
<h:outputScript name="js/some.js" />
arguments[i].poster = spinnerImage;

然而,更简洁的方法是将图像设置为与特定 CSS 样式类关联的 CSS 背景图像,然后让 JavaScript 在所需元素上设置该样式类。如前所述,您可以在通过&lt;h:outputStylesheet&gt; 加载的 CSS 文件中使用 EL 表达式。另见 a.o. How to reference JSF image resource as CSS background image url.

【讨论】:

  • 很好的答案,如果文件 js/some.js 有 javascript 文件引用,那么这些会返回 404 错误,因为它们没有以 h:outputScript 方式引用,你知道如何在不更新的情况下解决js/some.js 中的所有引用?
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多