哪个 XML 名称空间用于 JSF 2.2 及更高版本
Which XML namespace to use with JSF 2.2 and up
我已将我的应用程序从 JSF 1.2 迁移到 2.2。
它在 java.sun.com
域上使用了 XML 个名称空间,例如 xmlns:f="http://java.sun.com/jsf/core"
。但是,Oracle's Java EE 7 tutorial 在 xmlns.jcp.org
域上使用 XML 命名空间,例如
xmlns:f="http://xmlns.jcp.org/jsf/core"
.
推荐哪一个,为什么要更改?
Which one is recommended?
继续 xmlns.jcp.org
域上的 XML 个命名空间。这是自 2013 年 Java EE 7 以来新引入的(涵盖 a.o.JSF 2.2、Servlet 3.1、CDI 1.1 等)。请注意,这不仅会影响 Facelets 文件,还会影响 XML 配置文件,例如 faces-config.xml
, web.xml
, beans.xml
等
为了向后兼容,java.sun.com
上的旧 XML 命名空间仍然存在,但支持最终会在未来的 Java EE 版本中消失。您应该尽快迁移您的代码库。使用平均 IDE.
提供的 "find and replace in all files" 设施应该是一项微不足道的任务
只有较旧的 Mojarra 2.2.0 / 2.2.1 版本存在与 XML 命名空间更改相关的错误,但这些错误不应出现在较新的版本中。另见 a.o.
- Using new xmlns.jcp.org namespace on composites causes java.lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.putIfAbsent
- f:viewParam doesn't pass required parameter when new xmlns.jcp.org namespace is used
- The metadata component needs to be nested within a f:metadata tag. Suggestion: enclose the necessary components within <f:metadata>
and why was this changed?
因为自 2010 年以来 Java 不再来自 Sun。请注意,他们很聪明没有做到 java.oracle.com
或与当前拥有的公司紧密耦合。它现在很好地独立地绑定到 JCP (Java Community Process),JCP 是真正负责管理 Java (EE) 规范的人。
对于具有命名空间 confusion/issue 的未来访问者:
我想强调找出要使用哪个命名空间的一般方法:
- 如果您想使用来自 JSF HTML 标记库或 JSF 核心标记库的标记,请打开 JSF 实现 JAR(如 Oracle Mojarra、Apache MyFaces-
myfaces-impl-2.3.1.jar
)并找到标记库的.tld
或 .xml
文件(您可以在 META-INF
目录下找到它)并使用那里提到的命名空间。
- 如果您想使用 RichFaces 或 PrimeFaces,请打开它们的实现 JAR(如
richfaces-components-ui-4.0.0.Final.jar
或 primefaces-6.2.jar
)并执行与上述相同的操作。
如果实现有 .tld
(如 rich.tld
),那么您可以使用 <uri>
元素的值,例如 <uri>http://richfaces.org/rich</uri>
。如果实现有 .xml
(如 rich.taglib.xml
),那么您可以使用 <namespace>
元素的值,例如 <namespace>http://richfaces.org/rich</namespace>
我上面提到的内容与 JSF 严格相关,但通常也适用。关键是,如果您使用实现 JAR 中的名称空间,那么您永远不会 运行 出现问题。
我对所有新的官方oracle命名空间做了一个简单的总结:
<!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:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:p="http://xmlns.jcp.org/jsf/passthrough"
xmlns:cc="http://xmlns.jcp.org/jsf/composite"
xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions"
xmlns:jsf="http://xmlns.jcp.org/jsf">
<!-- Content here -->
</html>
我将其用作所有 .xhtml 文件的模板。详情可查看官方facelet标签库:JavaServer Faces 2.2 Facelets Tag Library Documentation
希望这对您有所帮助:)
我已将我的应用程序从 JSF 1.2 迁移到 2.2。
它在 java.sun.com
域上使用了 XML 个名称空间,例如 xmlns:f="http://java.sun.com/jsf/core"
。但是,Oracle's Java EE 7 tutorial 在 xmlns.jcp.org
域上使用 XML 命名空间,例如
xmlns:f="http://xmlns.jcp.org/jsf/core"
.
推荐哪一个,为什么要更改?
Which one is recommended?
继续 xmlns.jcp.org
域上的 XML 个命名空间。这是自 2013 年 Java EE 7 以来新引入的(涵盖 a.o.JSF 2.2、Servlet 3.1、CDI 1.1 等)。请注意,这不仅会影响 Facelets 文件,还会影响 XML 配置文件,例如 faces-config.xml
, web.xml
, beans.xml
等
为了向后兼容,java.sun.com
上的旧 XML 命名空间仍然存在,但支持最终会在未来的 Java EE 版本中消失。您应该尽快迁移您的代码库。使用平均 IDE.
只有较旧的 Mojarra 2.2.0 / 2.2.1 版本存在与 XML 命名空间更改相关的错误,但这些错误不应出现在较新的版本中。另见 a.o.
- Using new xmlns.jcp.org namespace on composites causes java.lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.putIfAbsent
- f:viewParam doesn't pass required parameter when new xmlns.jcp.org namespace is used
- The metadata component needs to be nested within a f:metadata tag. Suggestion: enclose the necessary components within <f:metadata>
and why was this changed?
因为自 2010 年以来 Java 不再来自 Sun。请注意,他们很聪明没有做到 java.oracle.com
或与当前拥有的公司紧密耦合。它现在很好地独立地绑定到 JCP (Java Community Process),JCP 是真正负责管理 Java (EE) 规范的人。
对于具有命名空间 confusion/issue 的未来访问者:
我想强调找出要使用哪个命名空间的一般方法:
- 如果您想使用来自 JSF HTML 标记库或 JSF 核心标记库的标记,请打开 JSF 实现 JAR(如 Oracle Mojarra、Apache MyFaces-
myfaces-impl-2.3.1.jar
)并找到标记库的.tld
或.xml
文件(您可以在META-INF
目录下找到它)并使用那里提到的命名空间。 - 如果您想使用 RichFaces 或 PrimeFaces,请打开它们的实现 JAR(如
richfaces-components-ui-4.0.0.Final.jar
或primefaces-6.2.jar
)并执行与上述相同的操作。
如果实现有 .tld
(如 rich.tld
),那么您可以使用 <uri>
元素的值,例如 <uri>http://richfaces.org/rich</uri>
。如果实现有 .xml
(如 rich.taglib.xml
),那么您可以使用 <namespace>
元素的值,例如 <namespace>http://richfaces.org/rich</namespace>
我上面提到的内容与 JSF 严格相关,但通常也适用。关键是,如果您使用实现 JAR 中的名称空间,那么您永远不会 运行 出现问题。
我对所有新的官方oracle命名空间做了一个简单的总结:
<!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:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
xmlns:p="http://xmlns.jcp.org/jsf/passthrough"
xmlns:cc="http://xmlns.jcp.org/jsf/composite"
xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions"
xmlns:jsf="http://xmlns.jcp.org/jsf">
<!-- Content here -->
</html>
我将其用作所有 .xhtml 文件的模板。详情可查看官方facelet标签库:JavaServer Faces 2.2 Facelets Tag Library Documentation
希望这对您有所帮助:)