2013-11-28 24 views
9

Ich bin ein Strom JSF-Projekt bewerten, wo die web.xml Konfiguration enthält:Konfiguration von com.sun.faces.config.ConfigureListener

  • die FacesServlet (konfiguriert *.xhtml)
  • die com.sun.faces.config.ConfigureListener

Ich verwende JSF 2.2 und Mojarra-Implementierung.

Ich bin verwirrt über die ConfigureListener. Wird diese Klasse in der Konfiguration benötigt? Was ist das Ziel dieser Klasse? Ich konnte keine Informationen finden und die Klasse hat fast kein Javadoc.

Wenn ich diese Konfiguration entfernen, scheint alles auf die gleiche Weise zu funktionieren. Also denke ich, dass die ConfigureListener könnte oder sollte entfernt werden, aber ich bin mir nicht sicher.

+0

Suchen Sie diese http://www.codeanch.com/t/428264/JSF/java/function-listener-sun-faces-config – Willmore

Antwort

10

Die ConfigureListener wird normalerweise automatisch über die Datei der Mojarra-Implementierungs-JAR-Datei registriert. Zusätzlich wurde die ConfigureListener explizit über ein Servlet 3.0 ServletContainerInitializer registriert, um einen alten GlassFish v3 Bug zu umgehen (Anmerkung: v3, nicht 3.0.x, also wirklich die erste GF3 Version überhaupt).

Es gibt Situationen, in denen die automatische Registrierung über die Datei .tld nicht ausreicht. Die wohlbekannte ist, wenn die Webapp zu Jetty bereitgestellt wird. Dies wird detailliert in dieser Q & A: could not find Factory: javax.faces.context.FacesContextFactory erläutert.

Wie bereits erwähnt und in dieser detaillierten Antwort, hat GlassFish v3 einen Fehler, bei dem die TLD-Datei zu spät gescannt wird und JSF daher nicht im richtigen Moment die notwendige Initialisierung durchführen konnte. Sie müssten dann die ConfigureListener in Webapps web.xml explizit registrieren.

Aber wenn es für Sie funktioniert, wenn es nicht explizit in web.xml registriert ist, dann halten Sie es einfach aus. Weniger Rauschen in web.xml ist besser. Wenn Sie jedoch möglicherweise in einem Container arbeiten, der für das genannte Problem anfällig ist (also wenn Ihre Webanwendung tatsächlich öffentlich verteilt ist und Sie keine Kontrolle über die Wahl des Zielcontainers haben), sollten Sie sie lieber für diesen Fall behalten Das".


aktualisieren: Es scheint, dass Tomcat 8.x Buggy Verhalten zeigt, wenn dieser Eintrag in web.xml aktiviert ist: diese Hörer tatsächlich zweimal statt nur einmal ausgeführt werden. Die Konsequenz ist katastrophal: unter anderem werden alle JSF-Event-Listener doppelt registriert und Komponentenbibliotheken werden zweimal geladen. Dies führt nur zu Konflikten während der Laufzeit. Stellen Sie bei der Bereitstellung in Tomcat sicher, dass dieser Eintrag aus web.xml entfernt wird.

+0

Vielen Dank für die Antwort. Ich erkannte, dass das 'FacesServlet' tatsächlich auf'/*. Xhtml' konfiguriert ist. Ich habe die Frage aktualisiert. – LaurentG

+0

Gern geschehen. Ich würde das überprüfen. Dies ist nämlich illegale Syntax. Ich habe das Q mit dem richtigen aktualisiert. – BalusC

+0

Sie haben Recht (wieder). Entschuldigung, ich habe zu schnell nachgesehen. Ich habe '* .xhtml'. – LaurentG