在 GlassFish 4 上将项目从 JavaServer Faces 2.1 / Java EE 5 迁移到 JavaServer Faces 2.2 / Java EE 7 Web 配置文件时,我遇到了无效的 HTML 代码,因为<html> ... </html>
JSF 代码中复合组件的每个实例都有附加标记。
环境:Mojarra 2.2.0 (GlassFish 4.0)、NetBeans 7.3.1、JDK 7
重现步骤:
- 使用 JavaServer Faces 创建一个新的“Java EE 7 Web”项目并选择 JSF 2.2 服务器库
- 在 index.html 中,选择 HTML 正文文本(“Hello from Facelets”)并重构为复合组件
示例源代码:
索引.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>
测试.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 代码中有错误吗?