Внешний CSS для JSF
что такое синтаксис для добавления внешнего файла 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>
5 ответов
Я думаю, что BalusC может получить ваш ответ.
тем не менее, я хотел бы добавить некоторые дополнительные моменты:
предположим, что вы работаете в подкаталогах веб-приложения.
Как мой опыт, вы можете попробовать это:
<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.
Я думаю, что проблема Sergionni в два раза.
во-первых, верно, что так называемый корневой родственник, как сказал Балуск, на самом деле является относительным доменом, поэтому в примере относительно http://example.com/
, а не http://example.com/context/
.
поэтому вы должны указать
<link rel="stylesheet" type="text/css" href="${request.contextPath}/styles/decoration.css" />
кстати BalusC, поздравляю, это первый раз, когда я вижу это правильно объяснено! Я изо всех сил старался это выяснить.
но, если вы хотите упростить и предлагаю:
<link rel="stylesheet" type="text/css" href="styles/decoration.css" />
предполагая, что стиль dir является сибблинг текущей страницы, то вы можете иметь вторую проблему:
вы затем в относительный метод URL и, я вы пришли на эту страницу вперед, а не перенаправление, Ваш браузер может быть обманут и не в состоянии следовать относительному пути.
чтобы решить эту вторую проблему, вы должны добавить это:
<head>
<base href="http://${request.serverName}:${request.serverPort}${request.contextPath}${request.servletPath}" />
Базовый элемент должен предшествовать любой ссылке.
базовый command, вы говорите своему браузеру, где вы на самом деле.
надеюсь, что это помогает.
и кстати еще одна странная вещь в этом удивительном мире 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>