Все значения считаются «правдивыми», за исключением следующих: «falsy»:
None
False
0
0.0
0j
[]
- пустая list
{}
- пустая dict
()
- пустая tuple
''
- пустая str
b''
- empty bytes
set()
- пустые объекты set
obj.__bool__()
возвращает False
obj.__len__()
, возвращают 0
Значение «правдивое» будет удовлетворять проверке, выполняемой операторами if
или while
. Мы используем «правдивые» и «ложные», чтобы отличать значения bool
True
и False
.
Правильный способ JSF 2.x использует <h:outputStylesheet>
, <h:outputScript>
и <h:graphicImage>
с 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 с относительными путями:
<h:head>
...
<h:outputStylesheet name="css/style.css" />
<h:outputScript name="js/script.js" />
</h:head>
<h:body>
...
<h:graphicImage name="images/logo.png" />
...
</h:body>
Атрибут name
должен представлять полный путь относительно папки /resources
. Его не нужно начинать с /
. Вам не нужен атрибут library
, если вы не разрабатываете библиотеку компонентов, такую как PrimeFaces или общий JAR-файл модуля, который совместно используется несколькими webapps.
Вы можете ссылаться на <h:outputStylesheet>
в любом месте , также в <ui:define>
шаблонных клиентов без необходимости в дополнительном <h:head>
. Он будет через компонент <h:head>
основного шаблона автоматически заканчиваться в сгенерированном <head>
.
<ui:define name="...">
<h:outputStylesheet name="css/style.css" />
...
</ui:define>
Вы можете ссылаться на <h:outputScript>
также в любом месте, но по умолчанию это будет в HTML точно там, где вы его объявили. Если вы хотите, чтобы он оказался в <head>
через <h:head>
, добавьте атрибут target="head"
.
<ui:define name="...">
<h:outputScript name="js/script.js" target="head" />
...
</ui:define>
Или, если вы хотите, чтобы оно закончилось в конце <body>
(прямо перед </body>
, так что, например, window.onload
и $(document).ready()
и т. д. не требуется) через <h:body>
, затем добавьте атрибут target="body"
.
<ui:define name="...">
<h:outputScript name="js/script.js" target="body" />
...
</ui:define>
HeadRenderer
Если вы используете PrimeFaces, его HeadRenderer
испортит значение по умолчанию <h:head>
], как описано выше. Вы в основном вынуждены форсировать заказ с помощью функции PrimeFaces <f:facet name="first|middle|last">
, которая может закончиться беспорядочным и «неуправляемым» кодом. Вы можете отключить его, как описано в этом ответе .
Вы даже можете упаковать ресурсы в 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; .
<link rel="shortcut icon" href="#{resource['images/favicon.ico']}" />
Файлы сторонних CSS загруженный через <h:outputStylesheet>
, который, в свою очередь, может потребоваться изменить ссылочные шрифты и / или изображения, чтобы использовать выражения #{resource}
, как описано в предыдущем разделе, в противном случае необходимо установить UnmappedResourceHandler
, чтобы иметь возможность обслуживать тех, кто использует JSF , См. Также a.o. Страница Bootsfaces отображается в браузере без какого-либо стиля и Как использовать файл Font Awesome 4.x CSS с JSF? Браузер не может найти файлы шрифтов .
Если вы намерены скрыть ресурсы из открытого доступа, перемещая всю папку /resources
в /WEB-INF
, то вы можете с тех пор, как JSF 2.2 необязательно изменит путь, связанный с webcontent, с помощью нового контекстного параметра web.xml
следующим образом:
<context-param>
<param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
<param-value>/WEB-INF/resources</param-value>
</context-param>
В более старых версиях JSF это невозможно.
Предположим, что вы работаете в подкаталогах веб-приложения. Вы можете попробовать следующее:
<link href="${facesContext.externalContext.requestContextPath}/css/style.css" rel="stylesheet" type="text/css"/>
Ссылка '${facesContext.externalContext.requestContextPath}/'
поможет вам немедленно вернуться в корень контекста.
В относительном URL-адресе ведущая косая черта / точки к корню домена. Поэтому, если страница JSF, например, запрошена http://example.com/context/page.jsf , URL-адрес CSS будет абсолютно указывать на http://example.com/styles /decoration.css. Чтобы узнать действительный относительный URL-адрес, вам нужно знать абсолютный URL-адрес как страницы JSF, так и файла CSS и извлечь ее из другого.
Предположим, что ваш файл CSS фактически находится в http://example.com/context/styles/decoration.css , тогда вам нужно удалить ведущую косую черту, чтобы она относилась к текущему контексту (одному из page.jsp):
<link rel="stylesheet" type="text/css" href="styles/decoration.css" />
Эти ответы помогли мне решить ту же проблему. Хотя моя проблема была более сложной, так как я использовал SASS и GULP.
Мне пришлось изменить (обратите внимание на «\» перед #. Вероятно, побочный эффект от gulp:
<h:outputStylesheet library="my_theme" name="css/default.css"/>
background: $blue url("\#{resource['my_theme/images/background-homepage-h1.png']}");
url("#{resource['otbofaces:date-entry/calendar.gif']}")
отлично работает в CSS-файле, но мне еще нужно найти что-нибудь, что я могу использовать в файле javascript, чтобы получить правильное расположение ресурсов. – mrswadge 21 January 2016 в 19:25<ui:composition template="/templates/report.xhtml">
с моим шаблоном, проживающим вweb/resources/templates/report.xhtml
, даже используя то, как ресурсы структурируются в библиотеках. Это не работает. – YoYo 25 February 2017 в 23:13