Получение EL в файле Javascript, загруженном @ResourceDependency - PullRequest
7 голосов
/ 28 августа 2011

Я использую аннотацию @ResourceDependency в компоненте JSF для добавления файлов Javascript и CSS на мою страницу JSF.

В моем файле Javascript мне нужно сослаться на другой файл ресурсов (файл .swf, который находится в META-INF / resources, как того требует JSF). Я пытался вставить выражение #{resource['swf:file.swf']} EL в свой код JavaScript, но оно не было решено.

Например, для следующего JS-файла на сервере:

var instance = new JSClass();
instance.setResourceUrl("#{resource['swf:file.swf']}");

Браузер получает:

var instance = new JSClass();
instance.setResourceUrl("#{resource['swf:file.swf']}");

что не так.

Когда я вставляю тот же EL в файл CSS, он разрешается правильно. Для следующего CSS-файла на сервере:

.instance-css-class {
  background: url("#{resource['swf:file.swf']}")
}

Браузер получает:

.instance-css-class {
  background: url("/webapp/javax.faces.resource/file.swf.jsf?ln=swf")
}

Это именно то, что мне нужно, но в файле JS.

Очевидно, что я могу использовать CSS в качестве обходного пути для проблемы (создайте элемент DOM, присоедините к нему класс CSS, а затем прочитайте и проанализируйте требуемое свойство стиля). Но есть ли более элегантный способ добиться этого? Это ошибка в библиотеке JSF (я использую Mojarra 2.0.3, с Jboss 6.1), или есть причина для такого поведения?

Обратите внимание, что приведенный выше код является частью библиотеки тегов, поэтому обходные пути, такие как эти , использовать нельзя.


Редактировать - Похоже, что обходной путь CSS невозможен, так как я не вижу способа получить атрибут CSS из файла CSS. Поэтому любой (рабочий) обходной путь также будет с радостью принят.

1 Ответ

0 голосов
/ 05 мая 2012

BalusC подробно ответил на аналогичный вопрос здесь . Хотя первое решение является наиболее простым в реализации, я бы порекомендовал вам перейти к третьему, что, на мой взгляд, является правильным путем.

...