JavaServer Faces 2.2复合组件以封闭形式呈现<;html></html>;标签
在GlassFish 4上将项目从JavaServer Faces 2.1/Java EE 5迁移到JavaServer Faces 2.2/Java EE 7 web概要文件时,我遇到了无效的HTML代码,因为有额外的JavaServer Faces 2.2复合组件以封闭形式呈现<;html></html>;标签,java,jsf,jsf-2,jsf-2.2,glassfish-4,Java,Jsf,Jsf 2,Jsf 2.2,Glassfish 4,在GlassFish 4上将项目从JavaServer Faces 2.1/Java EE 5迁移到JavaServer Faces 2.2/Java EE 7 web概要文件时,我遇到了无效的HTML代码,因为有额外的标记JSF代码中复合组件的每个实例 环境:Mojarra 2.2.0(GlassFish 4.0)、NetBeans 7.3.1、JDK 7 复制步骤: 使用JavaServerFaces创建一个新的“JavaEE7Web”项目,并选择JSF2.2ServerLibrary 在
代码>标记JSF代码中复合组件的每个实例
环境:Mojarra 2.2.0(GlassFish 4.0)、NetBeans 7.3.1、JDK 7
复制步骤:
- 使用JavaServerFaces创建一个新的“JavaEE7Web”项目,并选择JSF2.2ServerLibrary
- 在index.html中,选择html正文文本(“来自Facelets的Hello”)并重构为复合组件
示例源代码:
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>
Facelet标题
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>
Facelets的你好
实际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>
Facelet标题
Facelets的你好
这不是有效的HTML,因为还有另一个复合组件的代码>存在。我的JSF代码中有错误吗?尝试使用
<ui:component
xmlns="http://www.w3.org/1999/xhtml"
.....
>
请参见此处的示例:尝试使用
<ui:component
xmlns="http://www.w3.org/1999/xhtml"
.....
>
请参见此处的一个示例:进行此更改(并添加ui命名空间声明xmlns:ui=”http://xmlns.jcp.org/jsf/facelets“
),页面现在呈现一个异常:java.lang.NullPointerException位于com.sun.faces.util.Cache.get的java.util.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1144)(Cache.java:116)位于com.sun.faces.application.view.FaceletViewHandlingStrategy.getComponentMetadata(FaceletViewHandlingStrategy.java:237)…
你在使用GF4吗?如果是的话,我强烈建议用最新的更新javax.faces jar,因为apckaged的jar有很多bug。你在名称空间和设置方面也遵循了上面的例子吗?将javax.faces更新为2.2.4修复了它,非常感谢您的改进(并添加ui命名空间声明xmlns:ui=”http://xmlns.jcp.org/jsf/facelets“
),页面现在呈现一个异常:java.lang.NullPointerException位于java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1144)位于com.sun.faces.util.Cache.get(Cache.java:116)位于com.sun.faces.application.view.FaceletViewHandlingStrategy.getComponentMetadata(FaceletViewHandlingStrategy.java:237)…
你在使用GF4吗?如果是的话,我强烈建议用最新的更新javax.faces jar,因为apckaged jar有很多bug。你在名称空间和设置方面也遵循了上面的例子吗?将javax.faces更新为2.2.4修复了它,非常感谢你的提示