Ответ 1
Так как Facelets - это технология просмотра на основе XML, которая ест и испускает по существу разметку XML, вы не можете использовать ее с doctype HTML4. В документе типа HTML4 описаны несколько элементов, которые не могут быть самозакрывающимися, например <link>
, <meta>
, <br>
и <hr>
. Однако с помощью XML вы вынуждены закрывать их, например, <link/>
, <meta/>
и т.д. Таким образом, использование документа типа HTML4 абсолютно не является вариантом для Facelets (то есть, когда вы уважаете стандарты и/или боитесь валидатора w3, он, однако, отлично работает на большинстве, если не на всех веб-браузерах).
HTML5, с другой стороны, позволяет разметку XML. Это указано в глава 3.2.2 - Элементы:
Пример:
<link type="text/css" href="style.css"/>
Авторы могут по выбору выбрать этот синтаксис для элементов void в синтаксисе HTML. Некоторые авторы также предпочитают включать пробелы перед косой чертой, однако это необязательно. (Использование пробелов в этом модуле - это соглашение, унаследованное от рекомендаций по совместимости в XHTML 1.0, приложение C.)
Я сам использую <!DOCTYPE html>
полностью, также с JSF/Facelets, даже без объявления <?xml?>
в верхней части страницы. Он отлично работает во всех браузерах. С доктриной XHTML вы должны в соответствии с спецификацией использовать Content-Type
of application/xhtml+xml
, который только заставляет MSIE задыхаться (это не понимает). И поскольку это еще один из наиболее широко используемых браузеров... Замена типа содержимого XHTML на text/html
считается вредным, вы также Не хочу этого делать.
В соответствии с вашими аргументами:
HTML 5 не поддерживает пространства имен.
Это не имеет значения. Пространства имен представляют интерес только для технологии просмотра на стороне сервера на основе XML (например, Facelets), которая, в свою очередь, может генерировать чистый HTML-код с этими тегами. Следующий пример действителен для Facelets:
<!DOCTYPE html>
<html lang="en"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Title</title>
</h:head>
<h:body>
<h:outputText value="#{bean.text}" />
</h:body>
</html>
Это делает допустимым допустимым HTML5 (для клиентской стороны):
<!DOCTYPE html>
<html lang="en">
<head>
<title>Title</title>
</head>
<body>
Some text
</body>
</html>
Видите ли, Facelets уже удаляет объявления XHTML, поскольку они не имеют никакого значения на стороне клиента.
и
Также в HTML 5 есть несколько новых элементов, которые недоступны в XHTML
это тоже не имеет смысла. Это все о сгенерированном выходе. Который может быть HTML5 как хороший. Единственной проблемой может быть поддержка браузера и наличие сторонних компонентов JSF, которые отображают определенные элементы HTML5. Начиная с JSF 2.2, можно использовать новую функцию passthrough elements для включения пользовательских элементов в компонент JSF. Просто укажите элемент HTML5 a jsf:id
. Он будет прозрачно внутренне интерпретироваться как экземпляр UIPanel
в дереве компонентов JSF (например, <h:panelGroup>
).
<!DOCTYPE html>
<html lang="en"
xmlns:jsf="http://xmlns.jcp.org/jsf"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
>
<h:head>
<title>Title</title>
</h:head>
<h:body>
<header jsf:id="header">Header</header>
<nav jsf:id="nav">Nav</nav>
<main jsf:id="main">Main</main>
<footer jsf:id="footer">Footer</footer>
</h:body>
</html>
Вы даже можете ссылаться на него из ajax, как в <f:ajax render="main">
.
Собственно, XHTML является сверхвысоким. Его единственная цель - облегчить разработку HTML, используя инструменты на основе XML, которые могут манипулировать/преобразовывать/генерировать HTML-страницы на стороне сервера (например, Facelets). Но некоторые стартеры также используют его без использования какого-либо инструмента XML и выводят его как есть, потому что он "настолько классный" - по какой-то непонятной причине.
Не поймите меня неправильно. XHTML отлично подходит для просмотра на стороне сервера. Но просто не как технология разметки на стороне клиента. Это не имеет никакого значения на стороне клиента.