using javax.servlet.http;\r
using vmw.common;\r
using System.Diagnostics;\r
+using javax.faces.render;\r
+using System.IO;\r
\r
namespace Mainsoft.Web.Hosting\r
{\r
- public sealed class ServletFacesPageHandler : IHttpHandler, IServiceProvider\r
+ public abstract class BaseFacesPageHandler\r
+ {\r
+ static protected void SetupResponseWriter (AspNetFacesContext facesContext, string contentType, string characterEncoding) {\r
+ RenderKit renderKit = BaseHttpServlet.RenderKitFactory.getRenderKit (facesContext, facesContext.getViewRoot ().getRenderKitId ());\r
+ ResponseWriter writer = renderKit.createResponseWriter (new AspNetResponseWriter (facesContext.Context.Response.Output), contentType, characterEncoding);\r
+ facesContext.setResponseWriter (writer);\r
+ }\r
+\r
+ #region AspNetResponseWriter\r
+ private sealed class AspNetResponseWriter : java.io.Writer\r
+ {\r
+ readonly TextWriter _writer;\r
+ public AspNetResponseWriter (TextWriter writer) {\r
+ _writer = writer;\r
+ }\r
+ public override void close () {\r
+ _writer.Close ();\r
+ }\r
+\r
+ public override void flush () {\r
+ _writer.Flush ();\r
+ }\r
+\r
+ public override void write (char [] __p1, int __p2, int __p3) {\r
+ _writer.Write (__p1, __p2, __p3);\r
+ }\r
+\r
+ public override void write (int __p1) {\r
+ _writer.Write ((char) __p1);\r
+ }\r
+\r
+ public override void write (char [] __p1) {\r
+ _writer.Write (__p1);\r
+ }\r
+\r
+ public override void write (string __p1) {\r
+ _writer.Write (__p1);\r
+ }\r
+\r
+ public override void write (string __p1, int __p2, int __p3) {\r
+ _writer.Write (__p1, __p2, __p3);\r
+ }\r
+ }\r
+ #endregion\r
+ }\r
+\r
+ public sealed class ServletFacesPageHandler : BaseFacesPageHandler, IHttpHandler, IServiceProvider\r
{\r
readonly FacesContextFactory _facesContextFactory;\r
readonly Lifecycle _lifecycle;\r
readonly string _executionFilePath;\r
readonly Type _pageType;\r
+ Page _page;\r
\r
public bool IsReusable {\r
get { return false; }\r
HttpServletRequest request = wr.ServletRequest;\r
HttpServletResponse response = wr.ServletResponse;\r
\r
- FacesContext facesContext = ServletFacesContext.GetFacesContext (_facesContextFactory, servletContext, request, response, _lifecycle, context, _executionFilePath);\r
+ ServletFacesContext facesContext = ServletFacesContext.GetFacesContext (_facesContextFactory, servletContext, request, response, _lifecycle, context, _executionFilePath);\r
try {\r
try {\r
- Trace.WriteLine ("FacesPageHandler: before execute");\r
- _lifecycle.execute (facesContext);\r
- Trace.WriteLine ("FacesPageHandler: after execute");\r
-\r
+ try {\r
+ Trace.WriteLine ("FacesPageHandler: before execute");\r
+ _lifecycle.execute (facesContext);\r
+ Trace.WriteLine ("FacesPageHandler: after execute");\r
+ }\r
+ finally {\r
+ UIViewRoot viewRoot = facesContext.getViewRoot ();\r
+ if (viewRoot != null && viewRoot.getChildCount () > 0)\r
+ _page = (Page) viewRoot.getChildren ().get (0);\r
+ }\r
Trace.WriteLine ("FacesPageHandler: before render");\r
+ SetupResponseWriter (facesContext, response.getContentType (), response.getCharacterEncoding ());\r
_lifecycle.render (facesContext);\r
Trace.WriteLine ("FacesPageHandler: after render");\r
}\r
public object GetService (Type serviceType) {\r
if (serviceType == typeof (Type))\r
return _pageType;\r
+ if (serviceType == typeof (Page))\r
+ return _page;\r
return null;\r
}\r
}\r