He estado luchando durante los últimos días con la parte de inicio de sesión de mi aplicación web. Llegué al punto en el que puedo autenticar con éxito a un usuario que usa JDBCRealm en tomcat (leyendo usuarios de una base de datos de servidor sql). Ahora Quiero enviar algún tipo de comentario cuando la cuenta del usuario ha sido bloqueada, o cuando las credenciales son incorrectas, aquí es donde estoy estancado ahora.Cómo usar FacesContext.getCurrentInstance(), devuelve nulo
que quería utilizar esto:
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());
}
Pero FacesContext.getCurrentInstance() siempre devuelve un valor nulo ..
Después de hacer algunas investigaciones descubrí que la solicitud debe venir de una página ubicada en/se enfrenta para que se llame a FacesServlet y se inicialice FacesContext (al menos eso es lo que entendí).
Así que moví la página de inicio de sesión a una nueva carpeta llamada faces, dentro de la carpeta de páginas web. Pero ahora cada vez que intento llamar a la página login.xhtml, me sale este error:
/login.xhtml Not Found in ExternalContext as a Resource
y este es el 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)
consigo este error incluso cuando entro en la URL directamente en el navegador.
Im usando Netbeans 7.1 con Apache Tomcat 7 (que por cierto es un dolor porque consigo una gran cantidad de PermGen de excepciones de memoria -.-)
Cualquier ayuda sobre cómo solucionar este problema sería muy apreciada .
Sí, este es mi primer intento de JSF :) Gracias por su respuesta, no responde mi pregunta. Básicamente, no puedo acceder al FacesContext en cualquier lugar antes de que se ejecute FacesServlet, así que tengo que usar un bean administrado cada vez que me gusta acceder al Fctx. Sobre la parte de aprendizaje, me gusta probar hacer cosas básicas en un idioma antes de comenzar a leer un libro, de esa manera cuando lo estoy leyendo, será más fácil y realmente sabré de qué está hablando el libro . De todos modos, todavía no estoy seguro de por qué no puedo colocar la página dentro de la carpeta/faces? Seguiré tu consejo y cambiaré el patrón del Servlet de Caras. –