2 using System.Collections.Generic;
\r
5 using javax.faces.component;
\r
7 using javax.faces.context;
\r
8 using javax.faces.lifecycle;
\r
10 using javax.servlet;
\r
11 using javax.faces.webapp;
\r
12 using javax.servlet.http;
\r
14 using System.Diagnostics;
\r
15 using javax.faces.render;
\r
18 namespace Mainsoft.Web.Hosting
\r
20 public abstract class BaseFacesPageHandler
\r
22 static protected void SetupResponseWriter (AspNetFacesContext facesContext, string contentType, string characterEncoding) {
\r
23 RenderKit renderKit = BaseHttpServlet.RenderKitFactory.getRenderKit (facesContext, facesContext.getViewRoot ().getRenderKitId ());
\r
24 ResponseWriter writer = renderKit.createResponseWriter (new AspNetResponseWriter (facesContext.Context.Response.Output), contentType, characterEncoding);
\r
25 facesContext.setResponseWriter (writer);
\r
28 #region AspNetResponseWriter
\r
29 private sealed class AspNetResponseWriter : java.io.Writer
\r
31 readonly TextWriter _writer;
\r
32 public AspNetResponseWriter (TextWriter writer) {
\r
35 public override void close () {
\r
39 public override void flush () {
\r
43 public override void write (char [] __p1, int __p2, int __p3) {
\r
44 _writer.Write (__p1, __p2, __p3);
\r
47 public override void write (int __p1) {
\r
48 _writer.Write ((char) __p1);
\r
51 public override void write (char [] __p1) {
\r
52 _writer.Write (__p1);
\r
55 public override void write (string __p1) {
\r
56 _writer.Write (__p1);
\r
59 public override void write (string __p1, int __p2, int __p3) {
\r
60 _writer.Write (__p1, __p2, __p3);
\r
66 public class ServletFacesPageHandler : BaseFacesPageHandler, IHttpHandler, IServiceProvider
\r
68 readonly FacesContextFactory _facesContextFactory;
\r
69 readonly Lifecycle _lifecycle;
\r
70 readonly string _executionFilePath;
\r
71 readonly Type _pageType;
\r
74 public bool IsReusable {
\r
75 get { return false; }
\r
78 public ServletFacesPageHandler (string executionFilePath, Type pageType, FacesContextFactory facesContextFactory, Lifecycle lifecycle) {
\r
79 _facesContextFactory = facesContextFactory;
\r
80 _lifecycle = lifecycle;
\r
81 _executionFilePath = executionFilePath;
\r
82 _pageType = pageType;
\r
85 protected virtual ServletFacesContext GetFacesContext (FacesContextFactory facesContextFactory,
\r
86 ServletContext servletContext,
\r
87 ServletRequest servletRequest,
\r
88 ServletResponse servletResponse,
\r
89 Lifecycle lifecycle,
\r
90 HttpContext httpContext,
\r
91 string executionFilePath) {
\r
92 return ServletFacesContext.GetFacesContext (facesContextFactory, servletContext, servletRequest, servletResponse, lifecycle, httpContext, executionFilePath);
\r
95 public void ProcessRequest (HttpContext context) {
\r
96 ServletWorkerRequest wr = (ServletWorkerRequest) ((IServiceProvider) context).GetService (typeof (HttpWorkerRequest));
\r
97 ServletContext servletContext = wr.GetContext ();
\r
98 HttpServletRequest request = wr.ServletRequest;
\r
99 HttpServletResponse response = wr.ServletResponse;
\r
101 ServletFacesContext facesContext = GetFacesContext (_facesContextFactory, servletContext, request, response, _lifecycle, context, _executionFilePath);
\r
105 Trace.WriteLine ("FacesPageHandler: before execute");
\r
106 _lifecycle.execute (facesContext);
\r
107 Trace.WriteLine ("FacesPageHandler: after execute");
\r
110 UIViewRoot viewRoot = facesContext.getViewRoot ();
\r
111 if (viewRoot != null && viewRoot.getChildCount () > 0)
\r
112 _page = (Page) viewRoot.getChildren ().get (0);
\r
114 Trace.WriteLine ("FacesPageHandler: before render");
\r
115 SetupResponseWriter (facesContext, response.getContentType (), response.getCharacterEncoding ());
\r
116 _lifecycle.render (facesContext);
\r
117 Trace.WriteLine ("FacesPageHandler: after render");
\r
119 catch (FacesException fex) {
\r
120 Exception inner = fex.InnerException;
\r
122 TypeUtils.Throw (inner);
\r
127 facesContext.release ();
\r
131 public object GetService (Type serviceType) {
\r
132 if (serviceType == typeof (Type))
\r
134 if (serviceType == typeof (Page))
\r