Правильный способ JSF 2.x использует
,
и
с name
, ссылающимся на путь относительно папки webapp /resources
. Таким образом, вам не нужно беспокоиться о контексте, как это было бы в JSF 1.x. См. Также . Как включить CSS относительно пути к контексту в JSF 1.x?
Отбросить файлы CSS / JS / image в /resources
в папке открытого webcontent, как показано ниже (просто создайте один, если он еще не существует на уровне /WEB-INF
и /META-INF
).
WebContent
|-- META-INF
|-- WEB-INF
|-- resources
| |-- css
| | |-- other.css
| | `-- style.css
| |-- js
| | `-- script.js
| `-- images
| |-- background.png
| |-- favicon.ico
| `-- logo.png
|-- page.xhtml
:
В случае Maven это должно быть в /main/webapp/resources
и, таким образом, не /main/resources
(это для ресурсов Java (свойства / xml / text / config files), которые должны быть в runtime classpath, а не в webcontent). См. Также структуру Webapp Maven и JSF, где именно для размещения ресурсов JSF .
В конечном итоге эти ресурсы доступны, как показано ниже, везде без нужно fiddle с относительными путями:
...
...
...
Атрибут name
должен представлять полный путь относительно папки /resources
. Его не нужно начинать с /
. Вам не нужен атрибут library
, если вы не разрабатываете библиотеку компонентов, такую как PrimeFaces или общий JAR-файл модуля, который совместно используется несколькими webapps.
Вы можете ссылаться на
в любом месте , также в
шаблонных клиентов без необходимости в дополнительном
. Он будет через компонент
основного шаблона автоматически заканчиваться в сгенерированном .
...
Вы можете ссылаться на
также в любом месте, но по умолчанию это будет в HTML точно там, где вы его объявили. Если вы хотите, чтобы он оказался в через
, добавьте атрибут target="head"
.
...
Или, если вы хотите, чтобы оно закончилось в конце (прямо перед
, так что, например,
window.onload
и $(document).ready()
и т. д. не требуется) через
, затем добавьте атрибут target="body"
.
...
HeadRenderer
Если вы используете PrimeFaces, его HeadRenderer
испортит значение по умолчанию
], как описано выше. Вы в основном вынуждены форсировать заказ с помощью функции PrimeFaces
, которая может закончиться беспорядочным и «неуправляемым» кодом. Вы можете отключить его, как описано в этом ответе .
Вы даже можете упаковать ресурсы в JAR-файле. См. Также Структура для нескольких проектов JSF с общим кодом .
Вы можете в EL использовать отображение #{resource}
, чтобы позволить JSF в основном распечатывать URL ресурса, например /context/javax.faces.resource/folder/file.ext.xhtml?ln=library
, чтобы вы могли использовать его, например, CSS-фоновое изображение или значок. Единственным требованием является то, что сам файл CSS также должен служить ресурсом JSF, иначе EL-выражения не будут оцениваться. См. Также Как ссылаться на ресурс изображений JSF в качестве URL-адреса фонового изображения CSS .
.some {
background-image: url("#{resource['images/background.png']}");
}
Вот пример @import
.
@import url("#{resource['css/other.css']}");
Вот пример favicon. См. Также Добавить favicon в проект JSF и указать его в & lt; link & gt; .
Файлы сторонних CSS загруженный через
, который, в свою очередь, может потребоваться изменить ссылочные шрифты и / или изображения, чтобы использовать выражения #{resource}
, как описано в предыдущем разделе, в противном случае необходимо установить UnmappedResourceHandler
, чтобы иметь возможность обслуживать тех, кто использует JSF , См. Также a.o. Страница Bootsfaces отображается в браузере без какого-либо стиля и Как использовать файл Font Awesome 4.x CSS с JSF? Браузер не может найти файлы шрифтов .
Если вы намерены скрыть ресурсы из открытого доступа, перемещая всю папку /resources
в /WEB-INF
, то вы можете с тех пор, как JSF 2.2 необязательно изменит путь, связанный с webcontent, с помощью нового контекстного параметра web.xml
следующим образом:
javax.faces.WEBAPP_RESOURCES_DIRECTORY
/WEB-INF/resources
В более старых версиях JSF это невозможно.