Исходя из комментариев, ваша конкретная проблема в конечном итоге сводится к:
<h:outputStylesheet>
ничего не выводит в вывод HTML.
Учитывая тот факт, что у вас есть <h:head>
, единственной причиной может быть ошибка в композиции шаблона. Это может произойти, например, когда вы поместили <h:outputStylesheet>
вне <ui:define>
из <ui:composition>
с template
. Не видя ваших реальных композиций, трудно точно определить истинную причину вашей проблемы, но следующий исходный пример должен дать вам новое понимание и решить для вас.
Мастер шаблона, /WEB-INF/template.xhtml
:
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title><ui:insert name="title">Default title</ui:insert></title>
<h:outputStylesheet name="style/template.css" />
</h:head>
<h:body>
<div id="header">Header</div>
<div id="menu">Menu</div>
<div id="content"><ui:insert name="content">Default content</ui:insert></div>
<div id="footer">Footer</div>
</h:body>
</html>
Обратите внимание, что оно относится к /resources/style/template.css
внутри <h:head>
, что, таким образом, относится ко всем клиентам шаблона, использующим этот мастер-шаблон.
Шаблон клиента, /page.xhtml
:
<ui:composition template="/WEB-INF/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:define name="title">
New page title here
</ui:define>
<ui:define name="content">
<h:outputStylesheet name="style/page.css" />
<h1>New content here</h1>
<p>Blah blah</p>
</ui:define>
</ui:composition>
Обратите внимание, что это относится к /resources/style/page.css
внутри <ui:define>
, что в любом случае автоматически приведет к сгенерированному <head>
. Вы не должны иметь <h:head>
в шаблонном клиенте.
(Да, я использовал разные имена для файлов CSS, но это просто для того, чтобы показать, где именно вы должны были разместить компоненты <h:outputStylesheet>
. Да, я удалил атрибут library
, потому что это должно фактически представлять "theme", а не только тип контента, такой как "css", "js" и т. д., приведенные выше примеры предполагают использование библиотеки / темы по умолчанию)
Обновление : как вы уже догадались, вы действительно неправильно используете композицию шаблонов. Ваша проблема вызвана наличием <ui:composition>
в <body>
основного шаблона. Вам нужно удалить это. <ui:composition>
определяет корневой компонент композиции шаблона. Все, что находится за пределами <ui:composition>
, будет игнорироваться на выходе.
Смотри также: