2015-07-22 4 views
2

Можно ли указать Mojarra 2.2, какой DocType отображать на полученных html-страницах?Как указать целевой DOCTYPE в JSF 2.2?

Кажется, что он всегда делает следующий HTML5 Doctype:

<!DOCTYPE html> 

В нашем шаблоне facelet мы используем следующую декларацию DocType, и мы хотим, чтобы держать его в генерируемый HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

шаблон:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:h="http://java.sun.com/jsf/html"> 

<h:body> 
    <ui:insert name="content">Will be replaced</ui:insert> 
</h:body> 
</html> 

содержание:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:h="http://java.sun.com/jsf/html" 
       template="/templates/standalone.xhtml"> 

    <ui:define name="content"> 
     <h:panelGroup> 
     Foo 
     </h:panelGroup> 
    </ui:define> 
</ui:composition> 

Результат:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"><body> 
     Foo 
     </body> 
</html> 

Я попробовал его с Mojarra 2.2.7 и 2.2.12 с использованием GlassFish 4.1.

+0

Это не поведение по умолчанию. Итак, было бы полезно, если бы вы указали точную версию Mojarra, включите однопрофильный MVCE в вопросе (есть довольно определенная двусмысленность, потому что вы сказали там «шаблон») и/или в то же время попробуйте использовать последнюю последнюю версию (2.2.12). – BalusC

+0

Я добавил пример и попробовал его с Mojarra 2.2.12 с тем же результатом. – anotherUser

+1

Я воспроизвел его. Это действительно не намеренное поведение. – BalusC

ответ

0

JIRA issue for this посмотреть эту ссылку: https://java.net/jira/browse/JAVASERVERFACES-2820 и он был закрыт, так как это ожидаемое поведение.

«Составная страница - это то, где вы на самом деле используете шаблон. Таким образом, это самый внешний файл, где вы указали тип документа. В этом он определяет тип документа, который будет отображаться».

Просто укажите DOCTYPE в шаблоне и нигде

+0

Я использую одно и то же объявление DocType в шаблоне и составном представлении. Когда объявление DocType удаляется из составного представления, результат по-прежнему остается ''. – anotherUser

+0

Спасибо за ссылку. Последний комментарий к проблеме https://java.net/jira/browse/JAVASERVERFACES-2820?focusedCommentId=372654, похоже, связан с этой проблемой. – anotherUser

1

я ударил эту ошибку, когда после обработки JSF контент в формате PDF. Также я заметил, что при использовании <h:doctype> в результате генерируются два доктрины.

К счастью, моя проблема после обработки, я могу использовать String.replace("<!DOCTYPE html>", XHTML_DOCTYPE) для решения этой проблемы. В среде сервлетов вам, вероятно, придется использовать фильтр или обернуть HttpServletResponse, чтобы модифицировать doctype на лету. Или вы можете исправить реализацию JSF. Это имело бы смысл.

Смежные вопросы