Ich habe für die letzten paar Tage mit dem Login-Teil meines Web-App zu kämpfen. Ich bin an den Punkt gelangt, wo ich einen Benutzer erfolgreich mit dem JDBCRealm auf Tomcat authentifizieren kann (durch Lesen von Benutzern aus einer SQL-Server-Datenbank). Jetzt Ich möchte eine Art von Feedback senden, wenn das Konto des Benutzers blockiert wurde, oder wenn die Anmeldeinformationen inkorrekt sind, ist dies, wo ich jetzt feststecke.So verwendet FacesContext.getCurrentInstance(), gibt es null
Ich wollte diese verwenden:
try {
request.login(request.getParameter("user"), request.getParameter("pass"));
} catch (ServletException se) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Wrong Username/Password combination"));
log(se.getMessage());
}
Aber FacesContext.getCurrentInstance() gibt immer null ..
Nach einigen Recherchen fand ich heraus, dass die Anfrage von einer Seite in sich kommen muss/Gesichter, damit das FacesServlet aufgerufen wird und der FacesContext initialisiert wird (zumindest habe ich das verstanden).
Also zog ich die Login-Seite zu einem neuen Ordner mit dem Namen Gesichtern, in den Web-Seiten-Ordner. Aber jetzt immer wenn ich versuchen, die login.xhtml Seite aufzurufen, erhalte ich diese Fehlermeldung:
/login.xhtml Not Found in ExternalContext as a Resource
Und dies ist der Stacktrace:
com.sun.faces.context.FacesFileNotFoundException: /login.xhtml Not Found in ExternalContext as a Resource
at com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:232)
at com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:273)
at com.sun.faces.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:201)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:764)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
ich diesen Fehler, auch wenn ich die URL eingeben, um direkt in der Browser.
Im Netbeans mit 7.1 mit Apache Tomcat 7 (die durch die Art und Weise ist ein Schmerz, weil ich eine Menge PermGen aus Speichern Ausnahmen erhalten -.-)
Jede Hilfe, wie dies zu beheben wäre sehr dankbar .
Ja, dies ist mein erster JSF Versuch :) Danke für Ihre Antwort, es beantwortet meine Frage. Grundsätzlich kann ich nicht auf den FacesContext zugreifen, bevor das FacesServlet ausgeführt wird. Daher muss ich eine verwaltete Bean verwenden, wenn ich auf die Fctx zugreifen möchte. Über den Lernabschnitt, ich mag es, grundlegende Sachen auf einer Sprache zu versuchen, bevor ich anfange, ein Buch zu lesen, auf diese Weise, wenn ich es lese, wird es leichter kommen und ich werde wirklich wissen, worüber das Buch spricht . Wie auch immer, ich bin mir immer noch nicht sicher, warum ich die Seite nicht in einen/faces Ordner legen kann? Ich werde Ihrem Rat folgen und das Faces-Servlet-Muster ändern. –