JSF/Facelets: файл CSS не распознается с помощью тега <h: outputStylesheet> - программирование

JSF/Facelets: файл CSS не распознается с помощью тега <h: outputStylesheet>

Я работаю над проектом с использованием JSF/Facelets. Я хочу сделать некоторые изменения CSS в моем представлении XHTML, но ничего не происходит, когда я развертываю свое веб-приложение на своем Tomcat Server. Я пробовал много трюков, но у меня такой же результат.

В любом случае, здесь мои "styles.css":

body { width: 750px; }

#header 
{
width:              100%;
font-size:          36px;
font-weight:        bold;
line-height:        48px;
background-color:   navy;
color:              white;
}

#footer
{
width:              100%;
font-weight:        bold;
background-color:   navy;
color:              white;
}

И это основной шаблон "Template.html", включая "Header.html" и "Footer.html", где я добавляю свой "styles.css" с помощью тега:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html 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">
<head>
<h:outputStylesheet name="css/styles.css" />
    <!-- i've also tried this one, using the "library" attribute -->
    <!--
     <h:outputStylesheet library="css" name="styles.css" />
    -->
</head>
<h:body>
<h:panelGroup id="page" layout="block">

    <h:panelGroup id="header" layout="block">
        <ui:insert name="header">
            <ui:include src="Header.html" />
        </ui:insert>
    </h:panelGroup>

    <h:panelGroup id="container" layout="block">
        <h:panelGroup id="content" layout="block">
            <ui:insert name="content">CONTENT</ui:insert>
        </h:panelGroup>
    </h:panelGroup>

    <h:panelGroup id="footer" layout="block">
        <ui:insert name="footer">
            <ui:include src="Footer.html" />
        </ui:insert>
    </h:panelGroup>

</h:panelGroup>

</h:body>
</html>

Anf наконец-то здесь мой "Main.xhtml", который включает в себя шаблон "Template.html":

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <ui:composition 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"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich" template="Template.html">
<h:body>
    <ui:define name="content">
        <h:form>
            <h:inputText title="inputText"></h:inputText>
            <h:commandButton value="OK"></h:commandButton>
        </h:form>
    </ui:define>
</h:body>
 </ui:composition>

Заранее спасибо:)

4b9b3361

Ответ 1

Для <h:outputStylesheet><h:outputScript>) требуется <h:head>, но там есть <head>. Исправьте его соответствующим образом.

<h:head>
    <h:outputStylesheet name="css/styles.css" />
</h:head>

Кроме того, вам нужно убедиться, что файл css/styles.css помещен в подпапку /resources публичного webcontent.

WebContent
 |-- resources
 |    `-- css
 |         `-- styles.css
 :

Что касается вашей попытки использовать атрибут library, будьте осторожны с этим, использование library="css" не совсем корректно в этом контексте. См. Также: Что такое библиотека ресурсов JSF и как ее использовать?

Ответ 2

Добавьте ресурсы в папку WebContent

и внутренние ресурсы создают папку css

тогда получите доступ к таким файлам

h:outputStylesheet library="css" name="myNewStylesFile.css" target="head" в разделе h:head, который вы не добавили