1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.tobago.servlet;
21
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 import javax.faces.FactoryFinder;
26 import javax.faces.application.Application;
27 import javax.faces.application.NavigationHandler;
28 import javax.faces.application.ViewHandler;
29 import javax.faces.component.UIViewRoot;
30 import javax.faces.context.FacesContext;
31 import javax.faces.context.FacesContextFactory;
32 import javax.faces.lifecycle.Lifecycle;
33 import javax.faces.lifecycle.LifecycleFactory;
34 import javax.servlet.ServletException;
35 import javax.servlet.http.HttpServlet;
36 import javax.servlet.http.HttpServletRequest;
37 import javax.servlet.http.HttpServletResponse;
38 import java.io.IOException;
39
40 public abstract class NonFacesRequestServlet extends HttpServlet {
41
42 private static final long serialVersionUID = -7448621953821447997L;
43
44 private static final Logger LOG = LoggerFactory.getLogger(NonFacesRequestServlet.class);
45
46 @Override
47 protected void service(HttpServletRequest request, HttpServletResponse response)
48 throws ServletException, IOException {
49
50 LifecycleFactory lFactory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
51 Lifecycle lifecycle = lFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
52 FacesContextFactory fcFactory = (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
53 FacesContext facesContext = fcFactory.getFacesContext(getServletContext(), request, response, lifecycle);
54 try {
55
56
57 String outcome = invokeApplication(facesContext);
58
59 if (facesContext.getResponseComplete()) {
60 return;
61 }
62 if (LOG.isDebugEnabled()) {
63 LOG.debug("outcome = '" + outcome + "'");
64 }
65
66 Application application = facesContext.getApplication();
67 if (facesContext.getViewRoot() == null) {
68 ViewHandler viewHandler = application.getViewHandler();
69 String viewId = getFromViewId();
70 UIViewRoot view = viewHandler.createView(facesContext, viewId);
71 facesContext.setViewRoot(view);
72 }
73
74 NavigationHandler navigationHandler = application.getNavigationHandler();
75 navigationHandler.handleNavigation(facesContext, null, outcome);
76
77
78 lifecycle.render(facesContext);
79 } finally {
80 facesContext.release();
81 }
82 }
83
84 public abstract String invokeApplication(FacesContext facesContext);
85
86
87
88
89
90 public String getFromViewId() {
91 return "";
92 }
93 }