Вопрос
Каков синтаксис для добавления внешнего CSS-файла в jsf?
Пробовал оба способа.Не помогло.
1.
<head>
<style type="text/css">
@import url("/styles/decoration.css");
</style>
</head>
2.
<head>
<link rel="stylesheet" type="text/css" href="/styles/decoration.css" />
</head>
Решение
Я предполагаю, что у Балуска может быть ваш ответ.
Однако я хотел бы добавить несколько дополнительных моментов:
Предположим, что вы запускаете в подкаталогах веб-приложения.Исходя из моего опыта, возможно, вы захотите попробовать это:<link href="${facesContext.externalContext.requestContextPath}/css/style.css" rel="stylesheet" type="text/css"/>
В '${facesContext.externalContext.requestContextPath}/'
ссылка поможет вам немедленно вернуться к корню контекста.
Редактировать:Удален запуск /
От 'href="/${facesContext.ex...'
.Если приложение запущено в корневом контексте, URL-адрес CSS начинается с //
и браузеры не смогли найти CSS, так как он интерпретируется как http://css/style.css
.
Другие советы
Я никогда не использовал первое, но второе синтаксически допустимо и должно технически работать.Если это не сработает, то относительный URL-адрес в href
атрибут просто неправильный.
В относительных 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" />
Обновленный метод JSF 2.0 немного опрятнее.Вместо:
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/css/compass.css"/>
ты сейчас делаешь это:
<h:outputStylesheet library="css" name="compass.css"/>
и ресурс таблицы стилей должен быть размещен в resources\css.
Где ресурсы находятся на том же уровне, что и WEB-INF.
Я думаю, что проблема Серджионни двоякая.
Во-первых, верно, что так называемый корневой относительный, как сказал Балуск, на самом деле является относительным к домену, поэтому в примере он относится к http://example.com/
и не для того , чтобы http://example.com/context/
.
Поэтому вы должны указать
<link rel="stylesheet" type="text/css" href="${request.contextPath}/styles/decoration.css" />
Кстати, БалусК, поздравляю, я впервые вижу, чтобы это было правильно объяснено!Я довольно много боролся, чтобы обнаружить это.
Но, если вы хотите упростить и предложить:
<link rel="stylesheet" type="text/css" href="styles/decoration.css" />
предполагая, что каталог стилей является дублированием вашей текущей страницы, тогда у вас может возникнуть вторая проблема:
Затем вы переходите к методу относительного URL, и, если вы попали на эту страницу с помощью переадресации, а не редиректа, ваш браузер может быть введен в заблуждение и не сможет следовать относительному пути.
Чтобы решить эту вторую проблему, вы должны добавить это:
<head>
<base href="http://${request.serverName}:${request.serverPort}${request.contextPath}${request.servletPath}" />
Базовый элемент должен предшествовать любой ссылке.
С помощью базовой команды вы сообщаете своему браузеру, где вы находитесь на самом деле.
Надеюсь, это поможет.
И, кстати, еще одна странная вещь в этом чудесном мире jsf:
для ссылки со страницы на ее шаблон facelet корневая относительная ссылка на этот раз включает контекст, поэтому:
<ui:composition template="/layouts/layout.xhtml">
это действительно связано с http://example.com/context/layouts/layout.xhtml
и не для того , чтобы http://example.com/layouts/layout.xhtml
например, для <a>
или <link>
.
Жан-Мари Галио
Попробуйте приведенный ниже код для импорта css на вашу страницу jsf.Это наверняка сработает.
<style media="screen" type="text/css">
@import "#{facesContext.externalContext.request.contextPath}/css/Ebreez.css"
</style>