Составной компонент JavaServer Faces 2.2, отображаемый с включающими тегами <html>... </ html>

При переносе проекта из веб-профиля JavaServer Faces 2.1 / Java EE 5 в веб-профиль JavaServer Faces 2.2 / Java EE 7 на GlassFish 4 я обнаружил недопустимый код HTML из-за дополнительных <html> ... </html> теги для каждого экземпляра составного компонента в коде JSF.

Среда: Mojarra 2.2.0 (GlassFish 4.0), NetBeans 7.3.1, JDK 7

Действия по воспроизведению:

  • создайте новый проект "Java EE 7 Web" с помощью JavaServer Faces и выберите библиотеку сервера JSF 2.2
  • в index.html выберите основной текст HTML ("Hello from Facelets") и выполните рефакторинг в составной компонент

Пример исходного кода:

index.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">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ez="http://xmlns.jcp.org/jsf/composite/ezcomp">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <ez:test/>
    </h:body>
</html>

test.xhtml

<?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:cc="http://xmlns.jcp.org/jsf/composite">

    <!-- INTERFACE -->
    <cc:interface>
    </cc:interface>

    <!-- IMPLEMENTATION -->
    <cc:implementation>
        Hello from Facelets
    </cc:implementation>
</html>

Фактический вывод HTML:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head id="j_idt2">
        <title>Facelet Title</title></head><body><html xmlns="http://www.w3.org/1999/xhtml">

    <!-- INTERFACE -->

    <!-- IMPLEMENTATION -->
        Hello from Facelets

</html></body>
</html>

Это не правильный HTML, так как есть другой <html> ... </html> подарок для композитного компонента. Есть ли ошибка в моем коде JSF?

1 ответ

Решение

Попробуйте использовать

<ui:component
    xmlns="http://www.w3.org/1999/xhtml"
.....
>

Смотрите пример здесь: http://balusc.blogspot.co.uk/2013/01/composite-component-with-multiple-input.html

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