Поскольку Facelets - это технология представления, основанная на XML, которая по сути питается и испускает разметку XML, вы не можете использовать ее с типом документа HTML4. Тип документа HTML4 описывает несколько элементов, которые не могут быть самозакрывающимися, например <link>
, <meta>
, <br>
и <hr>
. Однако в XML вы вынуждены закрывать их, например, <link/>
, <meta/>
и т. Д. Поэтому использование типа документа HTML4 абсолютно неприемлемо для Facelets (то есть когда вы уважаете стандарты и / или боитесь валидатора w3 однако он отлично подойдет большинству, если не всем веб-браузерам).
HTML5, с другой стороны, допускает разметку XML. Это указано в главе 3.2.2 - Элементы :
Пример:
<link type="text/css" href="style.css"/>
Авторы могут по желанию использовать этот же синтаксис для пустых элементов в синтаксисе HTML. Некоторые авторы также предпочитают включать пробелы перед косой чертой, однако это не обязательно. (Использование пробелов таким способом является соглашением, унаследованным от рекомендаций по совместимости в XHTML 1.0, Приложение C.)
Я сам использую <!DOCTYPE html>
полностью, также с JSF / Facelets, даже без объявления <?xml?>
в верхней части страницы. Он отлично работает во всех браузерах. При использовании XHTML-документа вы должны, согласно спецификации, использовать Content-Type
из 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 атрибут 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 отлично как технология серверного вида. Но просто не как технология разметки на стороне клиента. Это совершенно не имеет значения на стороне клиента.
Смотри также: