Ответ 1
а затем я вижу, что все, проходящее через FacesServlet, добавлено к нему .xhtml, так что браузер запрашивает файлы .png.xhtml, файл .css.xhtml - это правильно?
Это относится только к ресурсам, включенным <h:outputStylesheet>
и <h:outputScript>
. Это не, связанное с изменением URL-адреса. Это связано с изменением с JSF 1.x на JSF 2.x и изменением от <link rel="stylesheet">
и <script>
к вышеупомянутым тегам JSF2.
Для ваших собственных скриптов, таблиц стилей и других статических материалов, которые должны быть поданы из общедоступного webcontent, вы должны не вручную добавить расширение .xhtml
. Вам не нужно ничего менять в отношении существующих статических ресурсов.
Только для фоновых изображений CSS и других ссылок url()
в файлах CSS, которые должны быть включены с помощью тега <h:outputStylesheet>
(и, следовательно, не для <link rel="stylesheet>
), вам нужно будет изменить местоположение url()
динамически разрешается EL. Вместо этого вам нужно будет использовать следующий синтаксис:
body {
background-image: url("#{resource['libraryname:path/to/image.png']}");
}
Представьте, что у вас есть следующая структура папок /resources
:
WebContent
|-- META-INF
|-- resources
| `-- default
| |-- images
| | `-- background.png
| `-- css
| `-- style.css
|-- WEB-INF
`-- test.xhtml
и что вы включаете style.css
в test.xhtml
следующим образом
<h:outputStylesheet library="default" name="css/style.css" />
тогда вы должны определить URL-адрес фонового изображения следующим образом
body {
background-image: url("#{resource['default:images/background.png']}");
}
Или, когда вы полагаетесь на библиотеку по умолчанию, поэтому вы не используете library
, тогда она должна выглядеть примерно так:
WebContent
|-- META-INF
|-- resources
| |-- images
| | `-- background.png
| `-- css
| `-- style.css
|-- WEB-INF
`-- test.xhtml
test.xhtml
:
<h:outputStylesheet name="css/style.css" />
style.css
:
body {
background-image: url("#{resource['images/background.png']}");
}
Что касается ограничения securiry, то он не, если вы уже используете сопоставление *.xhtml
. Ограничение безопасности предназначено для предотвращения того, чтобы enduser мог видеть исходный исходный код XHTML, когда FacesServlet
отображается на другой шаблон, а затем *.xhtml
. Конечный пользователь сможет увидеть исходный код XHTML, просто удалив /faces
часть из URL-адреса в случае отображения /faces/*
или переименования .jsf
в .xhtml
в случае отображения *.jsf
. Избавьтесь от ограничения безопасности, это ухудшит ситуацию, поскольку вы уже используете сопоставление *.xhtml
, что делает невозможным просмотр исходного исходного кода XHTML путем взлома URL-адреса.