2009-11-29 2 views
11

Что такое синтаксис для добавления внешнего файла 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> 

ответ

11

Я думаю, что у BalusC может быть ваш ответ.

Однако, я хотел бы добавить некоторые дополнительные пункты:

Предположим, что вы производите в подкаталоги из веб-приложения. Как мой опыт, вы можете попробовать это: <link href="${facesContext.externalContext.requestContextPath}/css/style.css" rel="stylesheet" type="text/css"/>

Ссылка '${facesContext.externalContext.requestContextPath}/' поможет вам немедленно вернуться в корень контекста.

EDIT: Удалено начало / от 'href="/${facesContext.ex...'. Если приложение работает в корневом контексте, URL-адрес URL начинается с //, и браузеры не могут найти CSS, поскольку он интерпретируется как http://css/style.css.

+1

да, это сработало для меня - без особого слэш – sergionni

7

Я никогда не использовал первый, но второй синтаксически действительной и технически работать. Если это не работает, то относительный 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" /> 
+0

странно, это не помогло, попробуем также метод, предложенный ниже, и скоро запишите результаты – sergionni

+0

Сообщите абсолютный URL как страницы JSF, так и файла CSS, тогда мы сможем помочь в математике. – BalusC

+0

JSF: C: \ образца \ SRC \ главная \ WebApp \ store.xhtml CSS: C: \ образца \ SRC \ главная \ \ WebApp стили \ decoration.css – sergionni

3

Я думаю, что проблема Sergionni в два раза.

Во-первых, верно, что так называемый корень-родственник, как и BalusC, фактически является относительным по отношению к домену, поэтому в примере это относительно http://example.com/, а не http://example.com/context/.

Таким образом, вы должны указать

<link rel="stylesheet" type="text/css" href="${request.contextPath}/styles/decoration.css" /> 

BTW BalusC, поздравления, это первый раз, когда я вижу это правильно объяснил! Я много искал, чтобы обнаружить это.

Но, если вы хотите, чтобы упростить и предложить:

<link rel="stylesheet" type="text/css" href="styles/decoration.css" /> 

при условии, что реж стиля является sibbling вашей текущей страницы, то вы можете иметь вторую проблему:

Вы тогда в относительный метод URL и, я пришел на эту страницу с помощью переадресации, а не перенаправления, ваш браузер может быть обманут и не сможет следовать относительному пути.

Чтобы решить эту вторую проблему, необходимо добавить следующее:

<head> 
    <base href="http://${request.serverName}:${request.serverPort}${request.contextPath}${request.servletPath}" /> 

Базовый элемент должен предшествовать любой ссылке.

По базовой команде вы сообщаете своему браузеру, где вы на самом деле.

Надеюсь, это поможет.

И КСТАТИ еще одна причудливая вещь в этом Wondeful Jsf мире:

связать со страницы его facelet шаблон, корень относительная ссылка IS, на этот раз, в том числе и контекст так:

<ui:composition template="/layouts/layout.xhtml"> 

это ссылки действительно http://example.com/context/layouts/layout.xhtml

и не http://example.com/layouts/layout.xhtml как для <a> или <link>.

Жан-Мари галиот

+1

Просто '' достаточно. А что касается «bizzare thing», это документированное поведение Facelets. Они всегда относятся к корню контекста, а не к корню домена. – BalusC

+0

Что такое корень контекста, что такое root домена? –

1

Попробуйте код, приведенный ниже, чтобы импортировать CSS в вашем Jsf page.It будет работать наверняка.

<style media="screen" type="text/css"> 

    @import "#{facesContext.externalContext.request.contextPath}/css/Ebreez.css" 

</style> 
4

Обновленный метод 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.

+0

Принимая во внимание правильное использование атрибута библиотеки, как описано [здесь] (http://stackoverflow.com/q/11988415/840977) – Louise

Смежные вопросы