Пролог / инструкция XML не удалены из вывода XHTML
Я начинаю изучать JavaServer Faces (JSF). Я использую GlassFish 3+. Я только что создал новый проект JSF в NetBeans и запустил проект. Это работало нормально, но, изучив вывод XHTML, я заметил, что объявление XML осталось. Это портит объявление DOCTYPE (которое всегда должно быть первым в документе).
JSF должен удалить декларацию XML, или я что-то не так сделал?
2 ответа
По умолчанию Facelets удаляет его только из композиций (включая файлы и составные компоненты) и файлов тегов. Он не удалит его из основного шаблона. Просто убери это сам. Вы вообще не должны использовать пролог XML при разработке HTML.
Будет ли пролог XML удален из основного шаблона, указано в приложении 1.1.1.1 спецификации JSF 2.2, в которой описывается конфигурация <facelets-processing>
элемент в faces-config.xml
, Пролог XML описан как "инструкции по обработке". В таблице вы увидите, что он удаляется (используется) только тогда, когда шаблон обрабатывается как представление XML или JSPX.
1.1.1.1
facelets-processing
элемент
<facelets-processing>
Элемент используется для воздействия на обработку файлов Facelets VDL. Поэтому этот параметр применяется только к тем запросам, которые достигают FaceletsViewDeclarationLanguage
реализация, как указано для среды выполнения черезjavax.faces.FACELETS_VIEW_MAPPINGS
а такжеjavax.faces.DEFAULT_SUFFIX
<context-param>
записей. Спецификация определяет три режима обработки файлов Facelets: синтаксис Facelets XHTML, синтаксис XML View и синтаксис Facelets JSPX. Этот последний синтаксис предназначен для облегчения перехода на Facelets для приложений, уже использующих синтаксис документа JSP (также известный как синтаксис JSPX). Влияние на обработку файлов в каждом из этих трех режимов указано в следующей таблице.Valid <process-as> values and their implications on the processing of Facelets. ----------------------------------------------------------------------------------------- <process-as> <process-as> <process-as> <process-as> html5</process-as> xhtml</process-as> xml</process-as> jspx</process-as> HTML 5 (default) Facelets XHTML XML View Facelets JSPX ----------------------------------------------------------------------------------------- XML Doctype Simplified to passed through consumed consumed <!DOCTYPE html> XML passed through passed through consumed consumed declaration Processing passed through passed through consumed consumed instructions CDATA passed through passed through consumed consumed section Escaping of escaped escaped escaped not escaped inline text XML passed through passed through consumed consumed Comments
В предыдущей таблице "пройдено" означает, что контент передается через пользовательский агент без изменений. "Потребляется" означает, что контент молча потребляется на сервере. Обратите внимание, что для разделов CDATA содержимое самого раздела CDATA пропускается, даже если должны использоваться начальный и конечный теги. "Экранированный" означает, что сенсивит контент в ответе автоматически экранируется:
&
становится&
, например. "Не сбежал" означает, что такой контент не экранирован.
Другими словами, когда вы создаете HTML5/XHTML, вы должны удалить его самостоятельно. На самом деле лучшая формулировка такова: вы не должны сами включать пролог XML в страницы HTML5 и XHTML, так как это не требуется; это требуется только на страницах XML и JSPX (и, таким образом, Facelets автоматически удалит его).
Смотрите также:
- Поддержка JavaServer Faces 2.2 и HTML5, почему XHTML все еще используется
- Можно ли использовать JSF+Facelets с HTML 4/5?
Независимо от конкретной проблемы, вы должны использовать <h:outputStylesheet>
вместо <link rel="stylesheet">
быть независимым от URL запроса.
<h:outputStylesheet name="css/default.css" />
<h:outputStylesheet name="css/cssLayout.css" />
Смотрите также:
Чтобы объявление XML не появлялось на моих отображаемых страницах, я обнаружил, что могу настроить JSF для обработки моих файлов.xhtml как XML. При обработке в режиме XML объявление xml не будет передаваться из моих исходных файлов на выход. Я еще не заметил никаких других побочных эффектов для внесения этого изменения. (Но если я найду что-нибудь, я последую здесь.)
Чтобы внести изменения в конфигурацию, я добавил следующее в мой Face-config.xml:
<faces-config-extension>
<facelets-processing>
<file-extension>.xhtml</file-extension>
<process-as>xml</process-as>
</facelets-processing>
</faces-config-extension>
Надеюсь это поможет