Поддержка JavaServer Faces 2.2 и HTML5, почему XHTML все еще используется

Прочитав поддержку HTML5 в JSF 2.2, я был удивлен тем, что нашел тот же самый тип XHTML, что и в предыдущих версиях Facelets в созданном файле шаблона с новым веб-приложением в Netbeans. Единственное различие заключается в том, что HTML-тег читается в JSF 2.2:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">

а не в более ранних версиях JSF:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">

Кажется, что неправильно использовать XHTML с обещанием HTML5. У меня только есть возможность использовать 2.2, если я выбираю его из "зарегистрированных библиотек" вместо "серверной библиотеки". Оказывает ли это влияние на версию рамки для проекта?

Являются ли Facelets слишком зависимыми от XHTML для поддержки HTML5?

Ответы

Ответ 1

Кажется, вы неправильно поняли цель XHTML, как и многие люди во время перевыбора XHTML пару лет назад. Короче говоря: проверьте нашу страницу вики XHTML. Внимательно прочитайте это. В двух словах, Facelets абсолютно не заботится о том, чтобы doctype использовался в сгенерированном HTML-выходе. Вы можете отлично описать HTML-тип HTML5 в шаблоне Facelets.

На самом деле, к сожалению, Netbeans по умолчанию готовит документ с помощью доктрины XHTML, в то время как HTML5 в наши дни является рекомендуемым типом doctype. Я не делаю Netbeans, но в Eclipse вы можете легко редактировать эти шаблоны и даже создавать свои собственные. Вы можете просто заменить весь документ типа XHTML на HTML5. Вы можете найти/создать эти шаблоны через Web "HTML файлы" Редактор "Шаблоны в префиксах IDE.

Обратите внимание, что поддержка HTML5 в JSF 2.2 не имеет никакого отношения к тому, чтобы поддерживать конкретный тип документа HTML5. Напротив, это поддерживается во всех версиях JSF, даже если используется старый JSP. JSP и Facelets - это технологии просмотра, которые позволяют генерировать HTML-вывод, который вполне может быть хорошим HTML5. Это также объясняется следующим близким ответом: Можно ли использовать JSF + Facelets с HTML 4/5?

Вместо этого поддержка HTML5 в JSF 2.2 охватывает возможность определения пользовательских атрибутов компонента JSF и включения пользовательских элементов HTML в компоненты JSF. Это было невозможно в JSF 2.1 и ранее. Любые пользовательские атрибуты компонента JSF (включая атрибуты data-xxx, рекомендованные HTML5) были просто проигнорированы рендерами JSF по умолчанию. См. Также следующий ответ: Пользовательские атрибуты HTML-тегов не отображаются JSF. В JSF 2.2 вы можете легко указать пользовательские атрибуты с помощью нового пространства имен http://xmlns.jcp.org/jsf/passthrough следующим образом:

<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputText ... a:autocorrect="off" />

В конце будет неподдерживаемый атрибут autocorrect, который фактически будет включен в сгенерированный вывод HTML. Обратите внимание, что я использую префикс пространства имен XML a ( "attribute" ) вместо p, как показано в учебнике Java EE, поскольку в противном случае он столкнулся с префиксом пространства имен XML по умолчанию p в PrimeFaces.

Включение пользовательских элементов HTML (включая элементы HTML5) в компоненты JSF - это вопрос о атрибуте jsf, таком как jsf:id.

<html ... xmlns:jsf="http://xmlns.jcp.org/jsf">
...
<header jsf:id="header">...</header>
<main jsf:id="main">...</main>
<footer jsf:id="footer">...</footer>

Те, кто под крышками, будут превращены в UIPanel (например, как <h:panelGroup>). И да, они являются ссылочными, например, <f:ajax render>.

Другими словами, "поддержка HTML5" снова является еще одним модным словом для "Поддержка пользовательских атрибутов".