gpt4 book ai didi

jsf - 在复合上使用新的 xmlns.jcp.org 命名空间会导致 java.util.concurrent.ConcurrentHashMap.putIfAbsent 处的 java.lang.NullPointerException

转载 作者:行者123 更新时间:2023-12-04 14:01:47 25 4
gpt4 key购买 nike

我正在阅读来自 http://docs.oracle.com/javaee/7/tutorial/doc/jsf-facelets005.htm#GIQZR 的 Java EE 7 教程

在我的 IDE 中输入第 8.5 章复合组件中的示例代码并在 GlassFish4.0 上运行示例后,出现错误

java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1078)
at com.sun.faces.util.Cache.get(Cache.java:116)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.getComponentMetadata(FaceletViewHandlingStrategy.java:237)
at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:951)
at javax.faces.application.ApplicationWrapper.createComponent(ApplicationWrapper.java:648)

然后我查看了本教程的旧版本,发现了不同之处。

在 Java EE 7 版本中,email.xhtml 代码如下所示:
<!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:composite="http://xmlns.jcp.org/jsf/composite"
xmlns:h="http://xmlns.jcp.org/jsf/html">

<h:head>
<title>This content will not be displayed</title>
</h:head>
<h:body>
<composite:interface>
<composite:attribute name="value" required="false"/>
</composite:interface>

<composite:implementation>
<h:outputLabel value="Email id: "></h:outputLabel>
<h:inputText value="#{cc.attrs.value}"></h:inputText>
</composite:implementation>
</h:body>
</html>

但是在 Java EE 6 版本中
<!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:composite="http://java.sun.com/jsf/composite"
xmlns:h="http://java.sun.com/jsf/html">

<h:head>
<title>This content will not be displayed</title>
</h:head>
<h:body>
<composite:interface>
<composite:attribute name="value" required="false"/>
</composite:interface>

<composite:implementation>
<h:outputLabel value="Email id: "></h:outputLabel>
<h:inputText value="#{cc.attrs.value}"></h:inputText>
</composite:implementation>
</h:body>
</html>

我把代码改成Java EE 6版本后,错误消失了。区别在于命名空间。不知道是不是本教程的问题。有知道的吗?

最佳答案

新方式怎么样xmlns.jcp.org在第一个 Mojarra 版本 2.2.0 和 2.2.1 中处理的 XML 命名空间被破坏。已在 Mojarra 2.2.2 中修复(注意:链接中的故障单描述了不同的问题症状,但实际上,它的原因基本相同)。建议至少升级到 Mojarra 2.2.2(如果可能,请始终选择最新的可用版本)。 GlassFish 4.0 捆绑了 2.2.0。您可以从 javaserverfaces.java.net 获取 JAR .您需要做的就是更换 javax.faces.jar GlassFish 中的文件 /modules新版本的文件夹。

Java EE 7 教程本身很好。只是执行被破坏了。顺便说一下,这种麻烦在第一个主要的 GlassFish 版本中并不罕见(所有人都急于按时准备好)。我建议等到 GlassFish 4.0.1 或 4.1 发布后再使用 Java EE 7,以避免将来出现意外。请注意,Apache Tomcat 和 JBoss AS 等其他供应商花时间发布了 Java EE 7 容器;他们还没有生产就绪版本。

关于jsf - 在复合上使用新的 xmlns.jcp.org 命名空间会导致 java.util.concurrent.ConcurrentHashMap.putIfAbsent 处的 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com