Поддержка 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" - это просто еще одно модное слово для "поддержки пользовательских атрибутов".