using javax.faces.component;\r
using System.Threading;\r
using System.Web.Configuration;\r
+using Mainsoft.Web.Hosting;\r
\r
namespace System.Web.UI\r
{\r
string _callbackEventError = String.Empty;\r
static readonly object CrossPagePostBack = new object ();\r
FacesContext _facesContext;\r
+ const string RenderBodyContentOnlyKey = "mainsoft.render.body.content.only";\r
\r
static readonly java.util.List emptyList = java.util.Collections.unmodifiableList (new java.util.ArrayList ());\r
- static readonly RenderKitFactory renderFactory = (RenderKitFactory) FactoryFinder.getFactory (FactoryFinder.RENDER_KIT_FACTORY);\r
\r
bool _isMultiForm = false;\r
bool _isMultiFormInited = false;\r
_context.PushHandler (this);\r
if (jsfHandler == _context.Handler)\r
_context.Handler = this;\r
+ \r
+ _context.CurrentHandlerInternal = this;\r
\r
return jsfHandler;\r
}\r
System.Diagnostics.Trace.WriteLine ("processSaveState");\r
\r
object state = new Pair (_state, GetValidatorsState ());\r
- if (getFacesContext ().getApplication ().getStateManager ().isSavingStateInClient (getFacesContext ())) {\r
- int length;\r
- byte [] buffer = new ObjectStateFormatter (this).SerializeInternal (state, out length);\r
- if (buffer.Length != length) {\r
- byte [] trimmedBuffer = new byte [length];\r
- Array.Copy (buffer, trimmedBuffer, length);\r
- buffer = trimmedBuffer;\r
- }\r
- state = vmw.common.TypeUtils.ToSByteArray (buffer);\r
- }\r
- return state;\r
+ return new StateSerializer (state);\r
}\r
\r
public override void processRestoreState (FacesContext context, object state) {\r
throw new ArgumentNullException ("state");\r
IHttpHandler jsfHandler = EnterThread ();\r
try {\r
- if (getFacesContext ().getApplication ().getStateManager ().isSavingStateInClient (getFacesContext ())) {\r
- byte [] buffer = (byte []) vmw.common.TypeUtils.ToByteArray ((sbyte []) state);\r
- state = new ObjectStateFormatter (this).DeserializeInternal (buffer);\r
- }\r
+ state = ((StateSerializer) state).State;\r
_state = (Pair) ((Pair) state).First;\r
_validatorsState = (bool []) ((Pair) state).Second;\r
RestorePageState ();\r
void HandleException (Exception ex) {\r
try {\r
if (ex is ThreadAbortException) {\r
- if (_context.Response.FlagEnd == ((ThreadAbortException) ex).ExceptionState) {\r
+ if (FlagEnd.Value == ((ThreadAbortException) ex).ExceptionState) {\r
Thread.ResetAbort ();\r
return;\r
}\r
FacesContext facesContext = getFacesContext ();\r
\r
ResponseWriter oldWriter = facesContext.getResponseWriter ();\r
- ResponseWriter writer;\r
- if (oldWriter != null) {\r
- writer = oldWriter.cloneWithWriter (new AspNetResponseWriter (httpWriter));\r
- }\r
- else {\r
- RenderKit renderKit = renderFactory.getRenderKit (facesContext, facesContext.getViewRoot ().getRenderKitId ());\r
-\r
- ServletResponse response = (ServletResponse) facesContext.getExternalContext ().getResponse ();\r
+ if (oldWriter == null)\r
+ throw new InvalidOperationException ();\r
\r
- writer = renderKit.createResponseWriter (new AspNetResponseWriter (httpWriter),\r
- response.getContentType (), //TODO: is this the correct content type?\r
- response.getCharacterEncoding ());\r
- }\r
+ ResponseWriter writer = oldWriter.cloneWithWriter (new AspNetResponseWriter (httpWriter));\r
+ \r
facesContext.setResponseWriter (writer);\r
return oldWriter;\r
}\r
}\r
}\r
#endregion\r
+\r
+ #region StateSerializer\r
+ public sealed class StateSerializer : java.io.Externalizable\r
+ {\r
+ object _state;\r
+\r
+ public StateSerializer ()\r
+ {\r
+ }\r
+\r
+ public StateSerializer (object state)\r
+ {\r
+ _state = state;\r
+ }\r
+\r
+ public object State\r
+ {\r
+ get { return _state; }\r
+ }\r
+\r
+ public void readExternal (java.io.ObjectInput __p1)\r
+ {\r
+ Console.WriteLine ("readExternal: " + CurrentPage);\r
+ ObjectStateFormatter osf = new ObjectStateFormatter (CurrentPage);\r
+ _state = osf.Deserialize (new ObjectInputStream (__p1));\r
+ }\r
+\r
+ public void writeExternal (java.io.ObjectOutput __p1)\r
+ {\r
+ Console.WriteLine ("writeExternal: " + CurrentPage);\r
+ ObjectStateFormatter osf = new ObjectStateFormatter (CurrentPage);\r
+ osf.Serialize (new ObjectOutputStream (__p1), _state);\r
+ }\r
+\r
+ private Page CurrentPage\r
+ {\r
+ get\r
+ {\r
+ HttpContext context = HttpContext.Current;\r
+ if (context.CurrentHandler is Page)\r
+ return (Page) context.CurrentHandler;\r
+ \r
+ return context.CurrentHandlerInternal;\r
+ }\r
+ }\r
+ } \r
+ #endregion\r
}\r
}\r