Tôi đã đấu tranh trong vài ngày qua với phần đăng nhập của ứng dụng web của tôi. Tôi đã nhận được đến điểm mà tôi có thể xác thực thành công một người dùng bằng cách sử dụng JDBCRealm trên tomcat (bằng cách đọc người dùng từ một cơ sở dữ liệu máy chủ sql). Bây giờ Tôi muốn gửi một số loại phản hồi khi tài khoản của người dùng bị chặn hoặc khi thông tin đăng nhập không chính xác, đây là nơi tôi bị kẹt ngay bây giờ.Cách sử dụng FacesContext.getCurrentInstance(), nó trả về null
Tôi muốn sử dụng này:
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());
}
Nhưng FacesContext.getCurrentInstance() luôn trả về null ..
Sau khi thực hiện một số nghiên cứu tôi phát hiện ra rằng yêu cầu phải đến từ một trang nằm trong/khuôn mặt để FacesServlet được gọi và FacesContext được khởi tạo (ít nhất đó là những gì tôi đã hiểu).
Vì vậy, tôi đã di chuyển trang đăng nhập vào một thư mục mới có tên là khuôn mặt, bên trong thư mục Trang Web. Nhưng bây giờ mọi tôi cố gắng gọi trang login.xhtml, tôi nhận được lỗi này:
/login.xhtml Not Found in ExternalContext as a Resource
Và đây là 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)
tôi nhận được lỗi này ngay cả khi tôi nhập URL trực tiếp vào Trình duyệt.
Im sử dụng Netbeans 7.1 với Apache Tomcat 7 (mà bằng cách này là một nỗi đau vì tôi nhận được rất nhiều PermGen ra khỏi ngoại lệ bộ nhớ -.-)
Bất kỳ giúp đỡ về làm thế nào để sửa lỗi này sẽ được đánh giá rất .
Yea, đây là lần thử JSF đầu tiên của tôi :) Cảm ơn câu trả lời của bạn, nó trả lời câu hỏi của tôi. Về cơ bản tôi không thể truy cập FacesContext ở bất cứ đâu trước khi FacesServlet chạy, vì vậy tôi phải sử dụng bean được quản lý bất cứ khi nào tôi muốn truy cập Fctx. Về phần học, tôi muốn thử làm những thứ cơ bản về ngôn ngữ trước khi tôi bắt đầu đọc một cuốn sách, theo cách đó khi tôi đọc nó, nó sẽ trở nên dễ dàng hơn và tôi thực sự biết cuốn sách đang nói về . Dù bằng cách nào tôi vẫn không chắc tại sao tôi không thể đặt trang bên trong thư mục/mặt? Tôi sẽ làm theo lời khuyên của bạn và thay đổi mẫu Khuôn mặt Servlet. –