Поддержка 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 абсолютно не заботится о том, какой тип документа используется в сгенерированном выводе HTML. Вы можете прекрасно объявить тип документа HTML5 в шаблоне Facelets.

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

Обратите внимание, что поддержка 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 (включая рекомендуемый HTML5 data-xxx атрибуты) просто игнорировались средствами визуализации 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" />

Это закончится в <h:inputText> неподдерживаемый атрибут autocorrect быть фактически включенным в сгенерированный вывод HTML. Обратите внимание, что я использую префикс пространства имен XML a ("атрибут") вместо 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" - это просто еще одно модное слово для "поддержки пользовательских атрибутов".

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