Как настроить h:head при использовании шаблона ui: Composition?

Я использую JSF для рендеринга HTML-страницы. Я оформляю страницу так:

<f:view xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:p="http://primefaces.org/ui"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core">

<h:head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <meta name="language" content="fr" />
    <title><ui:insert name="title">My app</ui:insert></title>
</h:head>

<h:body>
    <div id="top">
        <ui:include src="/header.xhtml"/>
    </div>

    <h:panelGroup id="center" layout="block" >
        <ui:insert name="center"/>
    </h:panelGroup>

    <div id="bottom">
        <ui:include src="/footer.xhtml"/>
    </div>
</h:body>

Этот шаблон имеет несколько "клиентских" страниц, например:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:h="http://java.sun.com/jsf/html"                
            xmlns:f="http://java.sun.com/jsf/core"
            xmlns:p="http://primefaces.org/ui"
            template="/layouts/master.xhtml">

<ui:define name="center">
    <ui:define name="title"><h:outputText value="#{myBean.description}"/></ui:define>
    <ui:include src="#{myBean.url}"/>
</ui:define>

В клиенте я должен добавить метаинформацию в заголовке. Было бы замечательно, если бы у нас был такой тег, как outputScript или outputStylesheet, который можно установить повсюду в документе и отобразить в HTML-теге "head".

Я не нашел ничего, чтобы сделать это. Есть ли способ добавить тег в шапку, когда я в этой ситуации? Спасибо!

1 ответ

Решение

<h:outputStylesheet> всегда автоматически перемещается в <h:head>так что вам не нужно беспокоиться об этом. За <h:outputScript>, который по умолчанию отображается в той же строке, где он был объявлен, вы можете просто установить target приписывать headТаким образом, он будет автоматически перемещен в <h:head> также.

<ui:define name="center">
    <h:outputStylesheet name="css/style.css" />
    <h:outputScript name="js/script.js" target="head" />
    ...
</ui:define>

Для другой метаинформации HTML-заголовка, когда это необходимо по какой-либо причине, вы можете просто объявить другую <ui:insert>,

<h:head>
    <ui:insert name="htmlhead" />
</h:head>

который вы можете использовать следующим образом

<ui:define name="htmlhead">
    <meta ... />
</ui:define>

Смотрите также:

Другие вопросы по тегам