Comment utiliser FacesContext.getCurrentInstance(), elle renvoie la valeur null

J'ai eu du mal pour le couple des derniers jours avec le login partie de mon application web. J'ai obtenu au point où je peux avec succès l'authentification d'un utilisateur à l'aide de la JDBCRealm sur tomcat(par la lecture des utilisateurs à partir d'une base de données sql server). Maintenant je veux envoyer une sorte de rétroaction lorsque le compte d'utilisateur a été bloqué, ou lorsque les informations d'identification sont incorrectes, c'est là où je suis coincé maintenant.

Je voulais l'utiliser:

    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());
    }

Mais FacesContext.getCurrentInstance() renvoie toujours null..

Après avoir fait quelques recherches, j'ai trouvé que la demande doit émaner d'une page qui se trouve dans /visages de sorte que la FacesServlet est appelée et le FacesContext est initialisé(du moins c'est ce que j'ai compris).

Donc je l'ai déplacé la page de connexion à un nouveau dossier nommé visages, à l'intérieur des Pages Web dossier. Mais maintenant chaque fois que j'essaie d'appeler la connexion.page xhtml, j'obtiens cette erreur:

/login.xhtml Not Found in ExternalContext as a Resource  

Et c'est la 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)  

J'obtiens cette erreur, même quand je tape directement l'URL dans le navigateur.

Im à l'aide de Netbeans 7.1 avec Apache Tomcat 7(qui est une douleur parce que je reçois beaucoup de PermGen de mémoire exceptions -.-)

Toute aide sur la façon de résoudre ce serait grandement apprécié.

OriginalL'auteur Andrei Dvoynos | 2012-04-02