Sto leggendo Java EE 7 Tutorial dal http://docs.oracle.com/javaee/7/tutorial/doc/jsf-facelets005.htm#GIQZRUsando nuovo spazio dei nomi xmlns.jcp.org su compositi provoca java.lang.NullPointerException a java.util.concurrent.ConcurrentHashMap.putIfAbsent
Dopo aver digitato il codice di esempio in Componenti capitolo 8,5 compositi nella mia IDE ed eseguire l'esempio a GlassFish4.0, ho ottenuto un errore
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)
Poi controllare la versione precedente di questo tutorial, ho trovato una differenza.
In Java EE 7 versione del codice email.xhtml è come segue:
<!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>
Ma nella versione 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>
Dopo aver cambiato il codice per Java EE 6 versione , l'errore è andato. La differenza è lo spazio dei nomi. Non so se questo è un problema di questo tutorial. C'è qualche sa?
Ho scaricato il jar Mojarra 2.2.2 dal link e lo metto in/modules. Ma ho ancora lo stesso problema. Penso che dovrei aspettare GlassFish 4.1. Comunque, grazie per la tua risposta. – Chris
Sono riuscito a riprodurre il problema su una configurazione GF4 non modificata. Il tuo caso d'uso ha iniziato a funzionare per me dopo averlo aggiornato con Mojarra 2.2.2. Hai ripulito le cartelle di lavoro/cache/deploy di GF4? Come stai gestendo il server? Standalone o tramite IDE? Nota che generalmente non invio le risposte se non ho confermato/sperimentato anche io il problema stesso. – BalusC
Ci scusiamo per i primi commenti. Ho dimenticato di rinominare il file jar per consentire a GlassFish di caricarlo prima. Ora funziona. Grazie – Chris