Подтвердить что ты не робот

Пролог/команда XML не удаляется из вывода XHTML

Я начинаю изучать JavaServer Faces (JSF). Я использую GlassFish 3+. Я только что создал новый проект JSF в NetBeans и запустил проект. Он работал нормально, но, изучив вывод XHTML, я заметил, что декларация XML осталась. Это испортило объявление DOCTYPE (которое всегда должно быть первым в документе).

enter image description here

Является ли JSF удалять декларацию XML или что-то я сделал неправильно?

4b9b3361

Ответ 1

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> используется для обработки файлов VDL Facelets. Поэтому этот параметр применяется только к тем запросам, которые достигают реализации Facelets ViewDeclarationLanguage, как указано в время выполнения через javax.faces.FACELETS_VIEW_MAPPINGS и javax.faces.DEFAULT_SUFFIX <context-param>. Спецификация определяет три режима обработки файлов Facelets: Facelets XHTML синтаксис, синтаксис XML-представления и синтаксис 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 проходит, даже если нужно использовать начальный и конечный теги. "бегство" означает, что Сенсибилизирующее содержимое в ответе автоматически экранируется: & становится, например, &amp;. "не сбежал" означает, что такой контент не экранирован.

Другими словами, когда вы создаете HTML5/XHTML, вам нужно удалить его самостоятельно. Лучшая формулировка на самом деле: вы не должны включать сам пролог XML на страницы HTML5 и XHTML, поскольку это не требуется; это требуется только на страницах XML и JSPX (и, таким образом, Facelets автоматически удалит его).

См. также:


Несвязанный к конкретной проблеме, вы должны использовать <h:outputStylesheet> вместо <link rel="stylesheet">, чтобы быть независимым от URL-адреса запроса.

<h:outputStylesheet name="css/default.css" />
<h:outputStylesheet name="css/cssLayout.css" />

См. также:

Ответ 2

Чтобы объявление XML не отображалось на моих визуализированных страницах, я обнаружил, что могу настроить JSF для обработки моих файлов .xhtml как XML. При обработке в XML-режиме объявление xml не будет передаваться из исходных файлов в выходной файл. Я еще не заметил никаких других побочных эффектов для этого изменения. (Но если найду что-нибудь, я буду следить за ним.)

Чтобы изменить конфигурацию, я добавил следующее в мои faces-config.xml:

<faces-config-extension>
    <facelets-processing>
        <file-extension>.xhtml</file-extension>
        <process-as>xml</process-as>
    </facelets-processing>  
</faces-config-extension>    

Надеюсь, что это поможет