jsf 2 ui:include .html выдают ошибку "Ошибка синтаксического анализа XML: элемент не найден"

Я добавляю header.html (не.xhtml) на свою страницу, но при предварительном просмотре страницы выдается ошибка "Ошибка синтаксического анализа XML: элемент не найден". Я знаю, что это тег, который не является должным образом закрытым вопросом, но, поскольку моя страница заголовка является файлом HTML, а не файлом HTML, он не должен закрывать тег, я прав?
Если я закрою все метатеги в моем header.html, моя страница будет работать нормально, но я хотел бы знать, что это необходимо для правильного закрытия всех тегов в html-файле, если я включу их в jsf2, спасибо.

header.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Header</title>
    <meta name="description" content="">
  </head>
  <body>header content</body>
</html>

welcome1.xhtml

<ui:include src="header.html" />
<p>welcome page</p>

2 ответа

Решение

Из документации Oracle, <ui:include> используется для encapsulate and reuse content among multiple XHTML pages, src атрибут должен указывать на правильно сформированный документ XML. Даже если вы хотите включить .html страницы, вы должны убедиться, что все теги закрыты правильно.

Если вы посмотрите более внимательно, вы увидите закрытие <html> в заголовке есть тег header.html, который должен заканчивать HTML-документ, как вы можете видеть в Структуре HTML-документа. Таким образом, когда вы включаете файл в окончательный вид, вы нарушаете этот контракт.

В JSF вам лучше использовать шаблонную опцию Facelets. Например, в главном шаблоне вы можете создать точки вставки, такие как раздел сценариев, а затем определить вставленное содержимое на страницах клиента шаблона (конечные представления). Пример Kickoff можно найти в этом уроке от mkyong.

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