Составной компонент 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