Author: igorz
Date: 2007-12-23 05:36:14 -0500 (Sun, 23 Dec 2007)
New Revision: 91823
Added:
trunk/mcs/class/System.Web/System.Web.Phantom/
trunk/mcs/class/System.Web/System.Web.UI/ClientScriptManager.jvm.cs
trunk/mcs/class/System.Web/System.Web/HttpResponse.jvm.cs
Modified:
trunk/mcs/class/System.Web/System.Web.UI.HtmlControls/HtmlForm.cs
trunk/mcs/class/System.Web/System.Web.UI/ClientScriptManager.cs
trunk/mcs/class/System.Web/System.Web.UI/Control.cs
trunk/mcs/class/System.Web/System.Web.UI/Control.jvm.cs
trunk/mcs/class/System.Web/System.Web.UI/Page.cs
trunk/mcs/class/System.Web/System.Web.UI/Page.jvm.cs
trunk/mcs/class/System.Web/System.Web/HttpApplication.cs
trunk/mcs/class/System.Web/System.Web/HttpApplicationFactory.cs
trunk/mcs/class/System.Web/System.Web/HttpContext.jvm.cs
trunk/mcs/class/System.Web/System.Web/HttpException.cs
trunk/mcs/class/System.Web/System.Web/HttpRequest.cs
trunk/mcs/class/System.Web/System.Web/HttpRequest.jvm.cs
trunk/mcs/class/System.Web/System.Web/HttpResponse.cs
trunk/mcs/class/System.Web/System.Web/HttpRuntime.cs
trunk/mcs/class/System.Web/System.Web20.csproj
Log:
for TARGET_J2EE only:
implement integration with JSF.
Modified: trunk/mcs/class/System.Web/System.Web/HttpApplication.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web/HttpApplication.cs 2007-12-23
10:17:27 UTC (rev 91822)
+++ trunk/mcs/class/System.Web/System.Web/HttpApplication.cs 2007-12-23
10:36:14 UTC (rev 91823)
@@ -77,7 +77,7 @@
using System.Web.UI;
#if TARGET_J2EE
-using [EMAIL PROTECTED];
+using Mainsoft.Web;
#endif
namespace System.Web {
@@ -702,7 +702,7 @@
//
// Ticks the clock: next step on the pipeline.
//
- void Tick ()
+ internal void Tick ()
{
try {
if (pipeline.MoveNext ()){
@@ -844,17 +844,6 @@
if (error != null){
HttpResponse response = context.Response;
-#if TARGET_J2EE
- IPortletActionRequest actionRequest =
context.ServletRequest as IPortletActionRequest;
- IPortletActionResponse actionResponse =
context.ServletResponse as IPortletActionResponse;
- if (actionRequest != null && actionResponse !=
null && actionRequest.processActionOnly ()) {
- string exception = "Exception of type "
+ context.Error.GetType () +
- " during processAction: " +
context.Error.Message + Console.Out.NewLine +
- context.Error.StackTrace;
- actionResponse.setRenderParameter
("vmw.action.exception", exception);
- return;
- }
-#endif
if (!response.HeadersSent){
response.ClearHeaders ();
response.ClearContent ();
@@ -1019,6 +1008,10 @@
if (stop)
goto release;
+#if TARGET_J2EE
+ processHandler:
+ bool doProcessHandler = false;
+#endif
try {
context.BeginTimeoutPossible ();
if (handler != null){
@@ -1031,6 +1024,10 @@
} else {
must_yield = false;
handler.ProcessRequest
(context);
+#if TARGET_J2EE
+ IHttpExtendedHandler
extHandler=handler as IHttpExtendedHandler;
+ doProcessHandler = extHandler
!= null && !extHandler.IsCompleted;
+#endif
}
}
} catch (ThreadAbortException taex){
@@ -1045,6 +1042,12 @@
in_begin = false;
context.EndTimeoutPossible ();
}
+#if TARGET_J2EE
+ if (doProcessHandler) {
+ yield return false;
+ goto processHandler;
+ }
+#endif
if (must_yield)
yield return stop_processing;
else if (stop_processing)
@@ -1291,18 +1294,6 @@
begin_iar = new AsyncRequestState (done, cb, extraData);
-#if TARGET_J2EE
- IPortletRenderRequest renderRequest =
context.ServletRequest as IPortletRenderRequest;
- if (renderRequest != null) {
- string actionException =
context.ServletRequest.getParameter ("vmw.action.exception");
- if (actionException != null &&
actionException.Length > 0) {
- FinalErrorWrite (context.Response,
actionException.Replace("\n", "<br>"));
- begin_iar.Complete ();
- return begin_iar;
- }
- }
-#endif
-
#if TARGET_JVM
if (true)
#else
@@ -1317,6 +1308,10 @@
void IHttpAsyncHandler.EndProcessRequest (IAsyncResult result)
{
+#if TARGET_J2EE
+ if (result == null)
+ result = begin_iar;
+#endif
if (!result.IsCompleted)
result.AsyncWaitHandle.WaitOne ();
begin_iar = null;
Modified: trunk/mcs/class/System.Web/System.Web/HttpApplicationFactory.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web/HttpApplicationFactory.cs
2007-12-23 10:17:27 UTC (rev 91822)
+++ trunk/mcs/class/System.Web/System.Web/HttpApplicationFactory.cs
2007-12-23 10:36:14 UTC (rev 91823)
@@ -437,6 +437,10 @@
//
internal static HttpApplication GetApplication (HttpContext
context)
{
+#if TARGET_J2EE
+ if (context.ApplicationInstance!=null)
+ return context.ApplicationInstance;
+#endif
HttpApplicationFactory factory = theFactory;
HttpApplication app = null;
if (factory.app_start_needed){
Modified: trunk/mcs/class/System.Web/System.Web/HttpContext.jvm.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web/HttpContext.jvm.cs 2007-12-23
10:17:27 UTC (rev 91822)
+++ trunk/mcs/class/System.Web/System.Web/HttpContext.jvm.cs 2007-12-23
10:36:14 UTC (rev 91823)
@@ -32,12 +32,17 @@
using System.Configuration;
using System.Threading;
using javax.servlet.http;
-using [EMAIL PROTECTED];
+using javax.faces.context;
+using System.Web.J2EE;
+using System.Web.UI;
+using javax.servlet;
+using System.Collections.Specialized;
+using Mainsoft.Web;
namespace System.Web {
public sealed partial class HttpContext {
- static LocalDataStoreSlot _ContextSlot =
Thread.GetNamedDataSlot ("Context");
+ static readonly LocalDataStoreSlot _ContextSlot =
Thread.GetNamedDataSlot ("Context");
// No remoting support (CallContext) yet in Grasshopper
[MonoInternalNote("Context - Use
System.Remoting.Messaging.CallContext instead of Thread storage")]
public static HttpContext Current
@@ -61,6 +66,10 @@
internal HttpServletRequest ServletRequest {
get { return
(HttpServletRequest)GetWorkerService(typeof(HttpServletRequest)); }
}
+
+ internal NameValueCollection RequestParameters {
+ get { return (NameValueCollection) GetWorkerService
(typeof (NameValueCollection)); }
+ }
internal HttpServletResponse ServletResponse {
get { return
(HttpServletResponse)GetWorkerService(typeof(HttpServletResponse)); }
@@ -87,8 +96,6 @@
get { return true; }
}
- internal bool IsPortletRequest { get { return ServletRequest is
IPortletRequest; } }
-
internal void BeginTimeoutPossible ()
{
}
@@ -96,5 +103,11 @@
internal void EndTimeoutPossible ()
{
}
+
+ internal void SetWorkerRequest (HttpWorkerRequest wr) {
+ WorkerRequest = wr;
+ Request.SetWorkerRequest (wr);
+ Response.SetWorkerRequest (wr);
+ }
}
}
Modified: trunk/mcs/class/System.Web/System.Web/HttpException.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web/HttpException.cs 2007-12-23
10:17:27 UTC (rev 91822)
+++ trunk/mcs/class/System.Web/System.Web/HttpException.cs 2007-12-23
10:36:14 UTC (rev 91823)
@@ -163,7 +163,7 @@
WriteFileTop (builder, "Runtime Error");
builder.Append (@"<p><strong>Description:</strong> An
application error occurred on the server. The current custom error settings for
this application prevent the details of the application error from being viewed
remotely (for security reasons)." + (
#if TARGET_J2EE //on portal we cannot know if we run locally
- HttpContext.Current.IsPortletRequest ?
String.Empty :
+ HttpContext.Current.ServletRequest == null ?
String.Empty :
#endif
" It could, however, be viewed by browsers
running on the local server machine.")
+ @"</p>
Modified: trunk/mcs/class/System.Web/System.Web/HttpRequest.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web/HttpRequest.cs 2007-12-23
10:17:27 UTC (rev 91822)
+++ trunk/mcs/class/System.Web/System.Web/HttpRequest.cs 2007-12-23
10:36:14 UTC (rev 91823)
@@ -601,9 +601,6 @@
if (IsContentType
("multipart/form-data", true))
LoadMultiPart ();
else if (
-#if TARGET_J2EE
- Context.IsPortletRequest ||
-#endif
IsContentType
("application/x-www-form-urlencoded", true))
LoadWwwForm ();
Modified: trunk/mcs/class/System.Web/System.Web/HttpRequest.jvm.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web/HttpRequest.jvm.cs 2007-12-23
10:17:27 UTC (rev 91822)
+++ trunk/mcs/class/System.Web/System.Web/HttpRequest.jvm.cs 2007-12-23
10:36:14 UTC (rev 91823)
@@ -33,7 +33,7 @@
using System.Web.Configuration;
using System.IO;
using System.Collections;
-using [EMAIL PROTECTED];
+using System.Collections.Specialized;
namespace System.Web
{
@@ -58,7 +58,11 @@
{
HttpServletRequest servletReq = context.ServletRequest;
if (servletReq == null) {
- RawLoadWwwForm ();
+ NameValueCollection requestParameters =
context.RequestParameters;
+ if (requestParameters != null)
+ form.Add (requestParameters);
+ else
+ RawLoadWwwForm ();
return;
}
@@ -66,7 +70,7 @@
for (java.util.Enumeration e =
servletReq.getParameterNames(); e.hasMoreElements() ;) {
string key = (string) e.nextElement();
- string [] qvalue = Context.IsPortletRequest ?
null : QueryString.GetValues (key);
+ string [] qvalue = QueryString.GetValues (key);
string [] qfvalue =
servletReq.getParameterValues (key);
for (int i = (qvalue != null) ? qvalue.Length :
0; i < qfvalue.Length; i++)
@@ -178,7 +182,7 @@
HttpServletRequest servletReq = context.ServletRequest;
if (servletReq == null)
return;
- bool inPortletMode = servletReq is IPortletRequest;
+ bool inPortletMode = true; //servletReq is
IPortletRequest;
bool shouldStoreCookiesCollection = false;
HttpSession javaSession = servletReq.getSession(false);
@@ -218,5 +222,13 @@
javaSession.setAttribute
(SessionCookies, sessionCookies);
}
}
+
+ internal void SetWorkerRequest (HttpWorkerRequest wr) {
+ worker_request = wr;
+ current_exe_path = null;
+ file_path = null;
+ base_virtual_dir = null;
+ }
+
}
}
Modified: trunk/mcs/class/System.Web/System.Web/HttpResponse.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web/HttpResponse.cs 2007-12-23
10:17:27 UTC (rev 91822)
+++ trunk/mcs/class/System.Web/System.Web/HttpResponse.cs 2007-12-23
10:36:14 UTC (rev 91823)
@@ -39,15 +39,12 @@
using System.Web.Configuration;
using System.Globalization;
using System.Security.Permissions;
-#if TARGET_J2EE
-using [EMAIL PROTECTED];
-#endif
namespace System.Web {
// CAS - no InheritanceDemand here as the class is sealed
[AspNetHostingPermission (SecurityAction.LinkDemand, Level =
AspNetHostingPermissionLevel.Minimal)]
- public sealed class HttpResponse {
+ public sealed partial class HttpResponse {
internal HttpWorkerRequest WorkerRequest;
internal HttpResponseStream output_stream;
internal bool buffer = true;
@@ -795,18 +792,6 @@
if (headers_sent)
throw new HttpException ("Headers have already
been sent");
-#if TARGET_J2EE
- // In J2EE portal we need to handle Redirect at the
processAction phase
- // using the portlet ActionResponse that will send for
us the redirect header.
- IPortletActionResponse resp = context.ServletResponse
as IPortletActionResponse;
- if (resp != null) {
- resp.sendRedirect (ApplyAppPathModifier (url));
- if (endResponse)
- End ();
- return;
- }
-#endif
-
#if NET_2_0
is_request_being_redirected = true;
#endif
Copied: trunk/mcs/class/System.Web/System.Web/HttpResponse.jvm.cs (from rev
91819,
branches/mainsoft/JSF/mcs/class/System.Web/System.Web/HttpResponse.jvm.cs)
Modified: trunk/mcs/class/System.Web/System.Web/HttpRuntime.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web/HttpRuntime.cs 2007-12-23
10:17:27 UTC (rev 91822)
+++ trunk/mcs/class/System.Web/System.Web/HttpRuntime.cs 2007-12-23
10:36:14 UTC (rev 91823)
@@ -42,6 +42,9 @@
using System.Web.UI;
using System.Web.Util;
using System.Threading;
+#if TARGET_J2EE
+using Mainsoft.Web;
+#endif
#if NET_2_0 && !TARGET_JVM
using System.CodeDom.Compiler;
@@ -415,7 +418,15 @@
static void RealProcessRequest (object o)
{
+#if TARGET_J2EE
+ HttpContext context = HttpContext.Current;
+ if (context == null)
+ context = new HttpContext ((HttpWorkerRequest)
o);
+ else
+ context.SetWorkerRequest ((HttpWorkerRequest)
o);
+#else
HttpContext context = new HttpContext
((HttpWorkerRequest) o);
+#endif
HttpContext.Current = context;
bool error = false;
#if !TARGET_J2EE
@@ -461,8 +472,21 @@
//
IHttpAsyncHandler ihah = app;
+#if TARGET_J2EE
+ if (context.Handler == null)
+ ihah.BeginProcessRequest (context, new
AsyncCallback (request_processed), context);
+ else
+ app.Tick ();
+ //ihh.ProcessRequest (context);
+ IHttpExtendedHandler extHandler =
context.Handler as IHttpExtendedHandler;
+ if (extHandler != null &&
!extHandler.IsCompleted)
+ return;
+
+ ihah.EndProcessRequest (null);
+#else
IAsyncResult appiar = ihah.BeginProcessRequest
(context, new AsyncCallback (request_processed), context);
ihah.EndProcessRequest (appiar);
+#endif
HttpApplicationFactory.Recycle (app);
}
Copied: trunk/mcs/class/System.Web/System.Web.Phantom (from rev 91819,
branches/mainsoft/JSF/mcs/class/System.Web/System.Web.Phantom)
Modified: trunk/mcs/class/System.Web/System.Web.UI/ClientScriptManager.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI/ClientScriptManager.cs
2007-12-23 10:17:27 UTC (rev 91822)
+++ trunk/mcs/class/System.Web/System.Web.UI/ClientScriptManager.cs
2007-12-23 10:36:14 UTC (rev 91823)
@@ -45,7 +45,7 @@
namespace System.Web.UI
{
#if NET_2_0
- public sealed
+ public sealed partial
#else
internal
#endif
@@ -161,7 +161,7 @@
prefix += page.theForm + ".";
#if TARGET_J2EE
// Allow the page to transform ActionUrl to a portlet
action url
- if (actionUrl != null && page.PortletNamespace != null)
{
+ if (actionUrl != null) {
actionUrl = page.CreateActionUrl(actionUrl);
prefix += "Portal";
}
Copied: trunk/mcs/class/System.Web/System.Web.UI/ClientScriptManager.jvm.cs
(from rev 91819,
branches/mainsoft/JSF/mcs/class/System.Web/System.Web.UI/ClientScriptManager.jvm.cs)
Modified: trunk/mcs/class/System.Web/System.Web.UI/Control.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI/Control.cs 2007-12-23 10:17:27 UTC
(rev 91822)
+++ trunk/mcs/class/System.Web/System.Web.UI/Control.cs 2007-12-23 10:36:14 UTC
(rev 91823)
@@ -453,14 +453,12 @@
EnsureIDInternal ();
string prefix = NamingContainer.UniqueID;
+ if (NamingContainer == Page || prefix == null) {
+ uniqueID = _userId;
#if TARGET_J2EE
- // For J2EE portlets we need to add the
namespace to the ID.
- if (NamingContainer == Page &&
Page.PortletNamespace != null)
- prefix = Page.PortletNamespace;
- else
+ if (getFacesContext () != null)
+ uniqueID = getFacesContext
().getExternalContext ().encodeNamespace (uniqueID);
#endif
- if (NamingContainer == Page || prefix == null) {
- uniqueID = _userId;
return uniqueID;
}
@@ -825,10 +823,6 @@
Control LookForControlByName (string id)
{
-#if TARGET_J2EE
- if (this == Page && id != null && id ==
Page.PortletNamespace)
- return this;
-#endif
EnsureControlsCache ();
return (Control) _controlsCache [id];
}
@@ -1305,17 +1299,37 @@
#endif
string ResolveClientUrl (string relativeUrl)
{
-#if TARGET_J2EE
- // There are no relative paths when rendering a J2EE
portlet
- if (Page != null && Page.PortletNamespace != null)
- return ResolveUrl (relativeUrl);
-#endif
if (relativeUrl == null)
throw new ArgumentNullException ("relativeUrl");
if (relativeUrl.Length == 0)
return String.Empty;
+#if TARGET_J2EE
+ relativeUrl = ResolveClientUrlInternal (relativeUrl);
+
+ javax.faces.context.FacesContext faces =
getFacesContext ();
+ if (faces == null)
+ return relativeUrl;
+
+ string url;
+ if (relativeUrl.IndexOf (':') >= 0)
+ url = ResolveAppRelativeFromFullPath
(relativeUrl);
+ else if (VirtualPathUtility.IsAbsolute (relativeUrl))
+ url = VirtualPathUtility.ToAppRelative
(relativeUrl);
+ else
+ return faces.getApplication ().getViewHandler
().getResourceURL (faces, relativeUrl);
+
+ if (VirtualPathUtility.IsAppRelative (url)) {
+ url = url.Substring (1);
+ url = url.Length == 0 ? "/" : url;
+ return faces.getApplication ().getViewHandler
().getResourceURL (faces, url);
+ }
+ return relativeUrl;
+ }
+
+ string ResolveClientUrlInternal (string relativeUrl) {
+#endif
if (VirtualPathUtility.IsAbsolute (relativeUrl) ||
relativeUrl.IndexOf (':') >= 0)
return relativeUrl;
Modified: trunk/mcs/class/System.Web/System.Web.UI/Control.jvm.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI/Control.jvm.cs 2007-12-23
10:17:27 UTC (rev 91822)
+++ trunk/mcs/class/System.Web/System.Web.UI/Control.jvm.cs 2007-12-23
10:36:14 UTC (rev 91823)
@@ -28,14 +28,207 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-using [EMAIL PROTECTED];
using System.Web.Hosting;
using System.Text;
+using javax.faces.component;
+using java.util;
+using javax.faces.el;
+using [EMAIL PROTECTED];
+using javax.faces.context;
namespace System.Web.UI
{
- public partial class Control
+ public partial class Control : UIComponent, StateHolder
{
+ ComponentChildrenList _childrenList;
+
+ protected override void addFacesListener (FacesListener __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override void broadcast (FacesEvent __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override void decode (FacesContext context) {
+ // do nothing
+ }
+
+ public override void encodeBegin (FacesContext __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override void encodeChildren (FacesContext __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override void encodeEnd (FacesContext __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override UIComponent findComponent (string __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override Map getAttributes () {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override int getChildCount () {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override List getChildren () {
+ if (_childrenList == null)
+ _childrenList = new ComponentChildrenList
(this);
+ return _childrenList;
+ }
+
+ public override string getClientId (FacesContext __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ protected override FacesContext getFacesContext () {
+ return FacesContext.getCurrentInstance ();
+ }
+
+ protected override FacesListener [] getFacesListeners
(java.lang.Class __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override UIComponent getFacet (string __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override Map getFacets () {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override Iterator getFacetsAndChildren () {
+ // TODO: consider facets.
+ return getChildren ().iterator ();
+ }
+
+ public override string getFamily () {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override string getId () {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override UIComponent getParent () {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ protected override javax.faces.render.Renderer getRenderer
(FacesContext __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override string getRendererType () {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override bool getRendersChildren () {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override ValueBinding getValueBinding (string name) {
+ return null;
+ }
+
+ public override bool isRendered () {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ // TODO: implement
+ public override void processDecodes (FacesContext context) {
+ // call processDecodes for all jsf children
+ }
+
+ public override void processRestoreState (FacesContext context,
object state) {
+ throw new NotSupportedException ();
+ }
+
+ public override object processSaveState (FacesContext context) {
+ throw new NotSupportedException ();
+ }
+
+ // TODO: implement
+ public override void processUpdates (FacesContext context) {
+ // call processUpdates for all jsf children
+ }
+
+ // TODO: implement
+ public override void processValidators (FacesContext context) {
+ // call processValidators for all jsf children
+ }
+
+ public override void queueEvent (FacesEvent __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ protected override void removeFacesListener (FacesListener
__p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override void setId (string __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override void setParent (UIComponent __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override void setRendered (bool __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override void setRendererType (string __p1) {
+ throw new Exception ("The method or operation is not
implemented.");
+ }
+
+ public override void setValueBinding (string name, ValueBinding
binding) {
+ throw new NotSupportedException ();
+ }
+
+ #region StateHolder Members
+
+ bool StateHolder.isTransient () {
+ return !EnableViewState;
+ }
+
+ void StateHolder.restoreState (FacesContext context, object
state) {
+ LoadViewState (state);
+ }
+
+ object StateHolder.saveState (FacesContext context) {
+ return SaveViewState ();
+ }
+
+ void StateHolder.setTransient (bool newTransientValue) {
+ EnableViewState = !newTransientValue;
+ }
+
+ #endregion
+
+ class ComponentChildrenList : AbstractList
+ {
+ Control _owner;
+
+ public ComponentChildrenList (Control owner) {
+ _owner = owner;
+ }
+
+ public override object get (int index) {
+ return _owner.Controls [index];
+ }
+
+ public override int size () {
+ return _owner.Controls.Count;
+ }
+ }
+
public virtual string TemplateSourceDirectory
{
get
@@ -52,22 +245,41 @@
}
}
+ string ResolveAppRelativeFromFullPath (string url) {
+ Uri uri = new Uri (url);
+ if (String.Compare (uri.Scheme,
Page.Request.Url.Scheme, StringComparison.OrdinalIgnoreCase) == 0 &&
+ String.Compare (uri.Host,
Page.Request.Url.Host, StringComparison.OrdinalIgnoreCase) == 0 &&
+ uri.Port == Page.Request.Url.Port)
+ return VirtualPathUtility.ToAppRelative
(uri.PathAndQuery);
+ return url;
+ }
- // Add a variant for specifying use of portlet resolveRenderUrl
- internal string ResolveUrl (string relativeUrl, bool
usePortletRenderResolve)
- {
- relativeUrl = ResolveUrl (relativeUrl);
- if (usePortletRenderResolve && Page != null)
- relativeUrl = Page.CreateRenderUrl
(relativeUrl);
- return relativeUrl;
+ internal string CreateActionUrl (string url) {
+ FacesContext faces = getFacesContext ();
+ if (faces == null)
+ return url;
+
+ url = Asp2Jsf (url);
+
+ return faces.getApplication ().getViewHandler
().getActionURL (faces, url);
}
- internal string ResolveClientUrl (string relativeUrl, bool
usePortletRenderResolve)
- {
- relativeUrl = ResolveClientUrl (relativeUrl);
- if (usePortletRenderResolve && Page != null)
- relativeUrl = Page.CreateRenderUrl
(relativeUrl);
- return relativeUrl;
+ string Asp2Jsf (string url) {
+ if (VirtualPathUtility.IsAbsolute (url))
+ url = VirtualPathUtility.ToAppRelative (url);
+
+ if (VirtualPathUtility.IsAppRelative (url)) {
+ url = url.Substring (1);
+ return url.Length == 0 ? "/" : url;
+ }
+ return url;
}
+
+ internal string ResolveClientUrl (string relativeUrl, bool
usePortletRenderResolve) {
+ if (usePortletRenderResolve)
+ return ResolveClientUrl (relativeUrl);
+ else
+ return ResolveUrl (relativeUrl);
+ }
}
}
Modified: trunk/mcs/class/System.Web/System.Web.UI/Page.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI/Page.cs 2007-12-23 10:17:27 UTC
(rev 91822)
+++ trunk/mcs/class/System.Web/System.Web.UI/Page.cs 2007-12-23 10:36:14 UTC
(rev 91823)
@@ -707,7 +707,7 @@
CultureInfo ret = null;
if (culture.StartsWith ("auto",
StringComparison.InvariantCultureIgnoreCase)) {
#if TARGET_J2EE
- if (Context.IsPortletRequest)
+ if (Context.ServletRequest == null)
return deflt;
#endif
string[] languages = Request.UserLanguages;
@@ -766,10 +766,6 @@
NameValueCollection coll = null;
if (0 == String.Compare (Request.HttpMethod, "POST", true,
CultureInfo.InvariantCulture))
coll = req.Form;
-#if TARGET_J2EE
- else if (IsPortletRender && req.Form ["__VIEWSTATE"] != null)
- coll = req.Form;
-#endif
else
coll = req.QueryString;
@@ -782,7 +778,17 @@
if (coll != null && coll ["__VIEWSTATE"] == null && coll
["__EVENTTARGET"] == null)
return null;
-
+#if TARGET_J2EE
+ if (getFacesContext () != null && _context.Handler !=
_context.CurrentHandler) {
+ // check if it is PreviousPage
+ string prevViewId = coll [PreviousPageID];
+ if (!String.IsNullOrEmpty (prevViewId)) {
+ string appPath =
VirtualPathUtility.RemoveTrailingSlash (Request.ApplicationPath);
+ prevViewId = prevViewId.Substring
(appPath.Length);
+ isCrossPagePostBack = String.Compare
(prevViewId, getFacesContext ().getExternalContext ().getRequestPathInfo (),
StringComparison.OrdinalIgnoreCase) == 0;
+ }
+ }
+#endif
return coll;
}
@@ -795,6 +801,14 @@
}
#endif
+ Control FindControl (string id, bool decode) {
+#if TARGET_J2EE
+ if (decode)
+ id = DecodeNamespace (id);
+#endif
+ return FindControl (id);
+ }
+
#if NET_2_0
[Obsolete]
#endif
@@ -1031,7 +1045,8 @@
writer.WriteLine ("\telse {{ {0} = document.{1}; }}", theForm,
formUniqueID);
writer.WriteLine ("\t{0}._instanceVariableName = '{0}';",
theForm);
#if TARGET_J2EE
- string serverUrl = Context.ServletResponse.encodeURL
(Request.RawUrl);
+ // TODO implement callback on portlet
+ string serverUrl = Request.RawUrl;
writer.WriteLine ("\t{0}.serverURL = {1};", theForm,
ClientScriptManager.GetScriptLiteral (serverUrl));
writer.WriteLine ("\twindow.TARGET_J2EE = true;");
writer.WriteLine ("\twindow.IsMultiForm = {0};", IsMultiForm ?
"true" : "false");
@@ -1053,6 +1068,18 @@
#endif
if (handleViewState)
+#if TARGET_J2EE
+ if (getFacesContext () != null) {
+ javax.faces.application.ViewHandler viewHandler
= getFacesContext ().getApplication ().getViewHandler ();
+ javax.faces.context.ResponseWriter
oldFacesWriter = SetupResponseWriter (writer);
+ try {
+ viewHandler.writeState (getFacesContext
());
+ }
+ finally {
+ getFacesContext ().setResponseWriter
(oldFacesWriter);
+ }
+ }
+#endif
scriptManager.RegisterHiddenField ("__VIEWSTATE",
_savedViewState);
scriptManager.WriteHiddenFields (writer);
@@ -1113,7 +1140,7 @@
used.Add (id, id);
- Control ctrl = FindControl (id);
+ Control ctrl = FindControl (id, true);
if (ctrl != null){
IPostBackDataHandler pbdh = ctrl as
IPostBackDataHandler;
IPostBackEventHandler pbeh = ctrl as
IPostBackEventHandler;
@@ -1145,7 +1172,7 @@
if (_requiresPostBackCopy != null &&
_requiresPostBackCopy.Count > 0) {
string [] handlers = (string [])
_requiresPostBackCopy.ToArray (typeof (string));
foreach (string id in handlers) {
- IPostBackDataHandler pbdh = FindControl (id) as
IPostBackDataHandler;
+ IPostBackDataHandler pbdh = FindControl (id,
true) as IPostBackDataHandler;
if (pbdh != null) {
_requiresPostBackCopy.Remove (id);
if (pbdh.LoadPostData (id,
requestValues)) {
@@ -1173,6 +1200,11 @@
public void ProcessRequest (HttpContext context)
#endif
{
+#if TARGET_J2EE
+ if (getFacesContext () != null)
+ EnterThread (context);
+ else
+#endif
SetContext (context);
if (clientTarget != null)
@@ -1189,6 +1221,16 @@
try {
InternalProcessRequest ();
+#if TARGET_J2EE
+ } catch (Exception ex) {
+ HandleException (ex);
+ throw;
+ }
+ finally {
+ if (getFacesContext () != null)
+ ExitThread ();
+ }
+#else
} catch (ThreadAbortException) {
// Do nothing, just ignore it by now.
} catch (Exception e) {
@@ -1197,6 +1239,7 @@
} finally {
ProcessUnload ();
}
+#endif
}
void ProcessException (Exception ex) {
@@ -1213,7 +1256,12 @@
RenderTrace ();
UnloadRecursive (true);
} catch {}
-
+#if TARGET_J2EE
+ if (getFacesContext () != null) {
+ if(IsCrossPagePostBack)
+ _context.Items [CrossPagePostBack] =
this;
+ }
+#endif
if (Thread.CurrentThread.CurrentCulture.Equals
(_appCulture) == false)
Thread.CurrentThread.CurrentCulture =
_appCulture;
@@ -1332,11 +1380,23 @@
renderingForm = false;
+#if TARGET_J2EE
+ if (getFacesContext () != null)
+ if (IsPostBack || IsCallback)
+ return;
+#endif
+
RestorePageState ();
ProcessPostData ();
ProcessRaiseEvents ();
if (ProcessLoadComplete ())
return;
+#if TARGET_J2EE
+ if (getFacesContext () != null) {
+ getFacesContext ().renderResponse ();
+ return;
+ }
+#endif
RenderPage ();
}
@@ -1363,9 +1423,6 @@
if (IsPostBack) {
#endif
Trace.Write ("aspx.page", "Begin ProcessPostData");
-#if TARGET_J2EE
- if (!IsGetBack)
-#endif
ProcessPostData (_requestValueCollection, false);
Trace.Write ("aspx.page", "End ProcessPostData");
}
@@ -1378,9 +1435,6 @@
if (IsPostBack) {
#endif
Trace.Write ("aspx.page", "Begin ProcessPostData Second
Try");
-#if TARGET_J2EE
- if (!IsGetBack)
-#endif
ProcessPostData (secondPostData, true);
Trace.Write ("aspx.page", "End ProcessPostData Second
Try");
}
@@ -1401,11 +1455,6 @@
void ProcessRaiseEvents () {
#if NET_2_0
-#if TARGET_J2EE
- if (IsGetBack)
- RestoreValidatorsState ();
- else
-#endif
if (IsPostBack || IsCallback) {
#else
if (IsPostBack) {
@@ -1430,6 +1479,13 @@
return true;
if (IsCallback) {
+#if TARGET_J2EE
+ if (getFacesContext () != null) {
+ _callbackTarget = GetCallbackTarget ();
+ ProcessRaiseCallbackEvent (_callbackTarget, ref
_callbackEventError);
+ return true;
+ }
+#endif
string result = ProcessCallbackData ();
HtmlTextWriter callbackOutput = new HtmlTextWriter
(Response.Output);
callbackOutput.Write (result);
@@ -1458,10 +1514,6 @@
Trace.Write ("aspx.page", "Begin SaveStateComplete");
OnSaveStateComplete (EventArgs.Empty);
Trace.Write ("aspx.page", "End SaveStateComplete");
-#if TARGET_J2EE
- if (OnSaveStateCompleteForPortlet ())
- return true;
-#endif // TARGET_J2EE
#endif // NET_2_0
return false;
}
@@ -1474,6 +1526,10 @@
//--
Trace.Write ("aspx.page", "Begin Render");
HtmlTextWriter output = new HtmlTextWriter (Response.Output);
+#if TARGET_J2EE
+ if (getFacesContext () != null)
+ SetupResponseWriter (output);
+#endif
RenderControl (output);
Trace.Write ("aspx.page", "End Render");
}
@@ -1540,7 +1596,7 @@
}
#if NET_2_0
- targetControl = FindControl (eventTarget);
+ targetControl = FindControl (eventTarget, true);
IPostBackEventHandler target = targetControl as
IPostBackEventHandler;
#else
IPostBackEventHandler target = FindControl (eventTarget) as
IPostBackEventHandler;
@@ -1697,6 +1753,11 @@
PageStatePersister PageStatePersister {
get {
if (page_state_persister == null)
+#if TARGET_J2EE
+ if (getFacesContext () != null)
+ return new FacesPageStatePersister
(this);
+ else
+#endif
page_state_persister = new
HiddenFieldPageStatePersister (this);
return page_state_persister;
}
@@ -2057,7 +2118,7 @@
if (callbackTarget == null || callbackTarget.Length == 0)
throw new HttpException ("Callback target not
provided.");
- Control targetControl = FindControl (callbackTarget);
+ Control targetControl = FindControl (callbackTarget, true);
ICallbackEventHandler target = targetControl as
ICallbackEventHandler;
if (target == null)
throw new HttpException (string.Format ("Invalid
callback target '{0}'.", callbackTarget));
@@ -2560,10 +2621,22 @@
if (_requestValueCollection != null) {
string prevPage = _requestValueCollection
[PreviousPageID];
if (prevPage != null) {
+#if TARGET_J2EE
+ if (getFacesContext () != null) {
+ IHttpHandler handler =
Context.ApplicationInstance.GetHandler (Context, prevPage);
+ Server.Execute (handler, null, true,
_context.Request.CurrentExecutionFilePath, null, false, false);
+ if (_context.Items.Contains
(CrossPagePostBack)) {
+ previousPage = (Page)
_context.Items [CrossPagePostBack];
+ _context.Items.Remove
(CrossPagePostBack);
+ }
+ return;
+ }
+#else
IHttpHandler handler =
PageParser.GetCompiledPageInstance (prevPage, Server.MapPath (prevPage),
Context);
previousPage = (Page) handler;
previousPage.isCrossPagePostBack = true;
Server.Execute (handler, null, true,
_context.Request.CurrentExecutionFilePath, null, false, false);
+#endif
}
}
}
@@ -2627,7 +2700,7 @@
foreach (string lss in themes) {
HtmlLink hl = new HtmlLink ();
- hl.Href = ResolveUrl (lss);
+ hl.Href = lss;
hl.Attributes["type"] = "text/css";
hl.Attributes["rel"] = "stylesheet";
Header.Controls.Add (hl);
Modified: trunk/mcs/class/System.Web/System.Web.UI/Page.jvm.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI/Page.jvm.cs 2007-12-23
10:17:27 UTC (rev 91822)
+++ trunk/mcs/class/System.Web/System.Web.UI/Page.jvm.cs 2007-12-23
10:36:14 UTC (rev 91823)
@@ -26,61 +26,62 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-using [EMAIL PROTECTED];
using javax.servlet.http;
using System.Collections.Specialized;
using System.Globalization;
using System.Web.Hosting;
using System.Web.J2EE;
-using System.ComponentModel;
+using System.ComponentModel;
+using System.IO;
+using javax.faces.context;
+using javax.faces.render;
+using javax.servlet;
+using javax.faces;
+using javax.faces.application;
+using [EMAIL PROTECTED];
+using javax.faces.el;
+using javax.faces.component;
+using System.Threading;
namespace System.Web.UI
{
public partial class Page
- {
- const string PageNamespaceKey = "__PAGENAMESPACE";
- const string RenderPageMark = "vmw.render.page=";
- const string ActionPageMark = "vmw.action.page=";
- static readonly string NextActionPageKey =
PortletInternalUtils.NextActionPage;
- static readonly string NextRenderPageKey =
PortletInternalUtils.NextRenderPage;
+ {
+ string _namespace = null;
+ StateManager.SerializedView _facesSerializedView;
+ MethodBinding _action;
+ MethodBinding _actionListener;
+ bool _immediate;
+ Pair _state;
+ bool [] _validatorsState;
+ ICallbackEventHandler _callbackTarget;
+ string _callbackEventError = String.Empty;
+ IHttpHandler _jsfHandler;
+ static readonly object CrossPagePostBack = new object ();
+
+ bool _isMultiForm = false;
+ bool _isMultiFormInited = false;
- bool _emptyPortletNamespace = false;
- string _PortletNamespace = null;
- bool _renderResponseInit = false;
- IPortletRenderResponse _renderResponse = null;
-
- internal string PortletNamespace
- {
- get {
- if (_emptyPortletNamespace)
- return null;
-
- if (_PortletNamespace == null) {
- IPortletResponse portletResponse = null;
- if (Context != null) {
- string usePortletNamespace =
J2EEUtils.GetInitParameterByHierarchy (Context.Servlet.getServletConfig (),
"mainsoft.use.portlet.namespace");
- if (usePortletNamespace == null
|| Boolean.Parse(usePortletNamespace))
- portletResponse =
Context.ServletResponse as IPortletResponse;
- }
- if (portletResponse != null)
- _PortletNamespace =
portletResponse.getNamespace ();
- else if (_requestValueCollection !=
null && _requestValueCollection [PageNamespaceKey] != null)
- _PortletNamespace =
_requestValueCollection [PageNamespaceKey];
-
- _emptyPortletNamespace =
_PortletNamespace == null;
- }
- return _PortletNamespace;
- }
+ internal string Namespace
+ {
+ get {
+ if (_namespace == null) {
+
+ if (getFacesContext () != null) {
+ _namespace = getFacesContext
().getExternalContext ().encodeNamespace (String.Empty);
+ }
+
+ _namespace = _namespace ?? String.Empty;
+ }
+ return _namespace;
+ }
}
internal string theForm {
get {
- return "theForm" + PortletNamespace;
+ return "theForm" + Namespace;
}
}
-
- bool _isMultiForm = false;
- bool _isMultiFormInited = false;
internal bool IsMultiForm {
get {
@@ -93,144 +94,337 @@
}
return _isMultiForm;
}
- }
-
- internal bool IsPortletRender
- {
- get {
- return RenderResponse != null;
- }
- }
-
- internal bool IsGetBack {
- get {
- return IsPostBack && IsPortletRender &&
- (0 == String.Compare
(Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase));
- }
- }
-
- internal IPortletRenderResponse RenderResponse
- {
- get {
- if (!_renderResponseInit)
- if (Context != null) {
- _renderResponse =
Context.ServletResponse as IPortletRenderResponse;
- _renderResponseInit = true;
- }
- return _renderResponse;
- }
- }
-
- public string CreateRenderUrl (string url)
- {
- if (RenderResponse != null)
- return RenderResponse.createRenderURL (url);
- if (PortletNamespace == null)
- return url;
-
- string internalUrl = RemoveAppPathIfInternal (url);
- if (internalUrl == null)
- return url;
-
- PostBackOptions options = new PostBackOptions (this);
- options.ActionUrl = RenderPageMark + internalUrl;
- options.RequiresJavaScriptProtocol = true;
- return ClientScript.GetPostBackEventReference (options);
- }
-
- public string CreateActionUrl (string url)
- {
- if (url.StartsWith (RenderPageMark,
StringComparison.Ordinal) || url.StartsWith (ActionPageMark,
StringComparison.Ordinal))
- return url;
-
- if (RenderResponse != null)
- return RenderResponse.createActionURL (url);
- if (PortletNamespace == null)
- return url;
-
- Uri requestUrl = Request.Url;
- string internalUrl = RemoveAppPathIfInternal (url);
- if (internalUrl == null)
- return url;
-
- return ActionPageMark + internalUrl;
- }
-
- private string RemoveAppPathIfInternal (string url)
- {
- Uri reqUrl = Request.Url;
- string appPath = Request.ApplicationPath;
- string currPage = Request.CurrentExecutionFilePath;
- if (currPage.StartsWith (appPath,
StringComparison.InvariantCultureIgnoreCase))
- currPage = currPage.Substring (appPath.Length);
- return PortletInternalUtils.mapPathIfInternal (url,
reqUrl.Host, reqUrl.Port, reqUrl.Scheme, appPath, currPage);
- }
-
- internal bool OnSaveStateCompleteForPortlet ()
- {
- if (PortletNamespace != null) {
- ClientScript.RegisterHiddenField
(PageNamespaceKey, PortletNamespace);
- ClientScript.RegisterHiddenField
(NextActionPageKey, "");
- ClientScript.RegisterHiddenField
(NextRenderPageKey, "");
- }
-
- IPortletActionResponse resp = Context.ServletResponse
as IPortletActionResponse;
- IPortletActionRequest req = Context.ServletRequest as
IPortletActionRequest;
- if (req == null)
- return false;
-
- // When redirecting don't save the page viewstate and
hidden fields
- if (resp.isRedirected ())
- return true;
-
- if (IsPostBack && 0 == String.Compare
(Request.HttpMethod, "POST", true, CultureInfo.InvariantCulture)) {
- resp.setRenderParameter ("__VIEWSTATE",
GetSavedViewState ());
- if (ClientScript.hiddenFields != null)
- foreach (string key in
ClientScript.hiddenFields.Keys)
- resp.setRenderParameter (key,
(string) ClientScript.hiddenFields [key]);
-
- if (is_validated && Validators.Count > 0) {
- string validatorsState =
GetValidatorsState ();
-#if DEBUG
- Console.WriteLine ("__VALIDATORSSTATE:
" + validatorsState);
-#endif
- if (!String.IsNullOrEmpty
(validatorsState))
- resp.setRenderParameter
("__VALIDATORSSTATE", validatorsState);
- }
- }
-
- // Stop processing only if we are handling
processAction. If we
- // are handling a postback from render then fall
through.
- return req.processActionOnly ();
- }
-
- string GetValidatorsState () {
- bool [] validatorsState = new bool [Validators.Count];
- bool isValid = true;
- for (int i = 0; i < Validators.Count; i++) {
- IValidator val = Validators [i];
- if (!val.IsValid)
- isValid = false;
- else
- validatorsState [i] = true;
- }
- if (isValid)
- return null;
-
- return GetFormatter ().Serialize (validatorsState);
- }
-
- void RestoreValidatorsState () {
- string validatorsStateSerialized = Request.Form
["__VALIDATORSSTATE"];
- if (String.IsNullOrEmpty (validatorsStateSerialized))
- return;
-
- is_validated = true;
- bool [] validatorsState = (bool []) GetFormatter
().Deserialize (validatorsStateSerialized);
- for (int i = 0; i < Math.Min (validatorsState.Length,
Validators.Count); i++) {
- IValidator val = Validators [i];
- val.IsValid = validatorsState [i];
- }
- }
+ }
+
+ void EnterThread (HttpContext context) {
+
+ _jsfHandler = context.CurrentHandler;
+ context.PopHandler ();
+ context.PushHandler (this);
+ if (_jsfHandler == context.Handler)
+ context.Handler = this;
+
+ SetContext (context);
+ }
+
+ void ExitThread () {
+ // TODO
+ //if (context.getResponseComplete ())
+ // Response.End ();
+
+ _context.PopHandler ();
+ _context.PushHandler (_jsfHandler);
+ if (this == _context.Handler)
+ _context.Handler = _jsfHandler;
+
+ }
+
+ public override void encodeBegin (FacesContext context) {
+ // do nothing
+ }
+
+ public override void encodeChildren (FacesContext context) {
+ System.Diagnostics.Trace.WriteLine ("encodeChildren");
+
+ EnterThread (HttpContext.Current);
+ try {
+ if (!context.getResponseComplete ()) {
+
+ if (IsCrossPagePostBack)
+ return;
+
+ if (IsCallback) {
+ string result =
ProcessGetCallbackResult (_callbackTarget, _callbackEventError);
+ HtmlTextWriter callbackOutput =
new HtmlTextWriter (Response.Output);
+ callbackOutput.Write (result);
+ callbackOutput.Flush ();
+ return;
+ }
+
+ // ensure lifecycle complete.
+ if (!IsLoaded) {
+ ProcessLoad ();
+ RestoreValidatorsState
(_validatorsState);
+ }
+ if (!IsPrerendered)
+ ProcessLoadComplete ();
+
+ RenderPage ();
+ }
+ }
+ catch (Exception ex) {
+ if (!(ex is ThreadAbortException))
+ ProcessException (ex);
+ throw;
+ }
+ finally {
+ ProcessUnload ();
+ ExitThread ();
+ }
+ }
+
+ public override void encodeEnd (FacesContext context) {
+ // do nothing
+ }
+
+ public override UIComponent getParent () {
+ return null;
+ }
+
+ public override void setParent (UIComponent parent) {
+ //ignore: parent is root
+ }
+
+ // TODO: consider validators state
+ public override object processSaveState (FacesContext context) {
+ System.Diagnostics.Trace.WriteLine ("processSaveState");
+
+ object state = new Pair (_state, GetValidatorsState ());
+ if (getFacesContext ().getApplication
().getStateManager ().isSavingStateInClient (getFacesContext ())) {
+ int length;
+ byte [] buffer = new ObjectStateFormatter
(this).SerializeInternal (state, out length);
+ if (buffer.Length != length) {
+ byte [] trimmedBuffer = new byte
[length];
+ Array.Copy (buffer, trimmedBuffer,
length);
+ buffer = trimmedBuffer;
+ }
+ state = vmw.common.TypeUtils.ToSByteArray
(buffer);
+ }
+ return state;
+ }
+
+ public override void processRestoreState (FacesContext context,
object state) {
+ System.Diagnostics.Trace.WriteLine
("processRestoreState");
+
+ if (state == null)
+ throw new ArgumentNullException ("state");
+ EnterThread (HttpContext.Current);
+ try {
+ if (getFacesContext ().getApplication
().getStateManager ().isSavingStateInClient (getFacesContext ())) {
+ byte [] buffer = (byte [])
vmw.common.TypeUtils.ToByteArray ((sbyte []) state);
+ state = new ObjectStateFormatter
(this).DeserializeInternal (buffer);
+ }
+ _state = (Pair) ((Pair) state).First;
+ _validatorsState = (bool []) ((Pair)
state).Second;
+ RestorePageState ();
+ }
+ catch (Exception ex) {
+ HandleException (ex);
+ throw;
+ }
+ finally {
+ ExitThread ();
+ }
+ }
+
+ public override void processDecodes (FacesContext context) {
+ System.Diagnostics.Trace.WriteLine ("processDecodes");
+
+ EnterThread (HttpContext.Current);
+ try {
+ ProcessPostData ();
+
+ EventRaiserFacesEvent facesEvent = new
EventRaiserFacesEvent (this);
+ facesEvent.setPhaseId
(PhaseId.INVOKE_APPLICATION);
+ context.getViewRoot ().queueEvent (facesEvent);
+
+ base.processDecodes (context);
+ }
+ catch (Exception ex) {
+ HandleException (ex);
+ throw;
+ }
+ finally {
+ ExitThread ();
+ }
+ }
+
+ public override void processValidators (FacesContext context) {
+ System.Diagnostics.Trace.WriteLine
("processValidators");
+
+ EnterThread (HttpContext.Current);
+ try {
+ base.processValidators (context);
+ }
+ catch (Exception ex) {
+ HandleException (ex);
+ throw;
+ }
+ finally {
+ ExitThread ();
+ }
+ }
+
+ public override void processUpdates (FacesContext context) {
+ System.Diagnostics.Trace.WriteLine ("processUpdates");
+
+ EnterThread (HttpContext.Current);
+ try {
+ base.processUpdates (context);
+ }
+ catch (Exception ex) {
+ HandleException (ex);
+ throw;
+ }
+ finally {
+ ExitThread ();
+ }
+ }
+
+ public override void broadcast (FacesEvent e) {
+ System.Diagnostics.Trace.WriteLine ("broadcast");
+
+ if (!(e is EventRaiserFacesEvent))
+ throw new NotSupportedException ("FacesEvent of
class " + e.GetType ().Name + " not supported by Page");
+
+ EnterThread (HttpContext.Current);
+ try {
+ ProcessRaiseEvents ();
+ ProcessLoadComplete ();
+ }
+ catch (Exception ex) {
+ HandleException (ex);
+ throw;
+ }
+ finally {
+ ExitThread ();
+ }
+ }
+
+ void HandleException (Exception ex) {
+ try {
+ if (!(ex is ThreadAbortException))
+ ProcessException (ex);
+ }
+ finally {
+ ProcessUnload ();
+ }
+ }
+
+ bool [] GetValidatorsState () {
+ if (is_validated && Validators.Count > 0) {
+ bool [] validatorsState = new bool
[Validators.Count];
+ bool isValid = true;
+ for (int i = 0; i < Validators.Count; i++) {
+ IValidator val = Validators [i];
+ if (!val.IsValid)
+ isValid = false;
+ else
+ validatorsState [i] = true;
+ }
+ return validatorsState;
+ }
+ return null;
+ }
+
+ void RestoreValidatorsState (bool [] validatorsState) {
+ if (validatorsState == null)
+ return;
+
+ is_validated = true;
+ for (int i = 0; i < Math.Min (validatorsState.Length,
Validators.Count); i++) {
+ IValidator val = Validators [i];
+ val.IsValid = validatorsState [i];
+ }
+ }
+
+ ResponseWriter SetupResponseWriter (TextWriter httpWriter) {
//TODO
+ FacesContext facesContext = getFacesContext ();
+
+ ResponseWriter oldWriter =
facesContext.getResponseWriter ();
+ RenderKitFactory renderFactory = (RenderKitFactory)
FactoryFinder.getFactory (FactoryFinder.RENDER_KIT_FACTORY);
+ RenderKit renderKit = renderFactory.getRenderKit
(facesContext,
+
facesContext.getViewRoot
().getRenderKitId ());
+
+ ServletResponse response = (ServletResponse)
facesContext.getExternalContext ().getResponse ();
+
+ ResponseWriter writer = renderKit.createResponseWriter
(new AspNetResponseWriter (httpWriter),
+
response.getContentType (), //TODO: is this the
correct content type?
+
response.getCharacterEncoding ());
+ facesContext.setResponseWriter (writer);
+
+ return oldWriter;
+ }
+
+ string DecodeNamespace (string id) {
+ if (Namespace.Length > 0 && id.Length >
Namespace.Length && id.StartsWith (Namespace, StringComparison.Ordinal))
+ id = id.Substring (Namespace.Length);
+ return id;
+ }
+
+ #region FacesPageStatePersister
+ sealed class FacesPageStatePersister : PageStatePersister
+ {
+ public FacesPageStatePersister (Page page)
+ : base (page) {
+ }
+
+ public override void Load () {
+ if (Page._state != null) {
+ ViewState = Page._state.First;
+ ControlState = Page._state.Second;
+ }
+ }
+
+ public override void Save () {
+ if (ViewState != null || ControlState != null)
+ Page._state = new Pair (ViewState,
ControlState);
+ }
+ }
+ #endregion
+
+ #region EventRaiserFacesEvent
+ sealed class EventRaiserFacesEvent : FacesEvent
+ {
+ public EventRaiserFacesEvent (Page page)
+ : base (page) {
+ }
+
+ public override bool isAppropriateListener
(FacesListener __p1) {
+ throw new NotSupportedException ();
+ }
+
+ public override void processListener (FacesListener
__p1) {
+ throw new NotSupportedException ();
+ }
+ }
+ #endregion
+
+ #region AspNetResponseWriter
+ private sealed class AspNetResponseWriter : java.io.Writer
+ {
+ readonly TextWriter _writer;
+ public AspNetResponseWriter (TextWriter writer) {
+ _writer = writer;
+ }
+ public override void close () {
+ _writer.Close ();
+ }
+
+ public override void flush () {
+ _writer.Flush ();
+ }
+
+ public override void write (char [] __p1, int __p2, int
__p3) {
+ _writer.Write (__p1, __p2, __p3);
+ }
+
+ public override void write (int __p1) {
+ _writer.Write ((char) __p1);
+ }
+
+ public override void write (char [] __p1) {
+ _writer.Write (__p1);
+ }
+
+ public override void write (string __p1) {
+ _writer.Write (__p1);
+ }
+
+ public override void write (string __p1, int __p2, int
__p3) {
+ _writer.Write (__p1, __p2, __p3);
+ }
+ }
+ #endregion
}
}
Modified: trunk/mcs/class/System.Web/System.Web.UI.HtmlControls/HtmlForm.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI.HtmlControls/HtmlForm.cs
2007-12-23 10:17:27 UTC (rev 91822)
+++ trunk/mcs/class/System.Web/System.Web.UI.HtmlControls/HtmlForm.cs
2007-12-23 10:36:14 UTC (rev 91823)
@@ -258,13 +258,12 @@
action += Page.Request.QueryStringRaw;
#if TARGET_J2EE
// Allow the page to transform action to a portlet
action url
- if (Page.IsPortletRender) {
- string customAction = Attributes ["action"];
- if (customAction != null && customAction.Length
> 0)
- action = customAction;
- else
- action =
Page.RenderResponse.createActionURL (action);
- }
+ string customAction = Attributes ["action"];
+ if (String.IsNullOrEmpty(customAction))
+ action = CreateActionUrl (action);
+ else
+ action = customAction;
+
#endif
#if NET_2_0
Modified: trunk/mcs/class/System.Web/System.Web20.csproj
===================================================================
--- trunk/mcs/class/System.Web/System.Web20.csproj 2007-12-23 10:17:27 UTC
(rev 91822)
+++ trunk/mcs/class/System.Web/System.Web20.csproj 2007-12-23 10:36:14 UTC
(rev 91823)
@@ -946,7 +946,6 @@
<Compile Include="System.Web.UI\OutputCacheLocation.cs" />
<Compile Include="System.Web.UI\OutputCacheParameters.cs" />
<Compile Include="System.Web.UI\PageHandlerFactory.cs" />
- <Compile Include="System.Web.UI\PageLifeCycle.cs" />
<Compile Include="System.Web.UI\PageStatePersister.cs" />
<Compile Include="System.Web.UI\PageTheme.cs" />
<Compile Include="System.Web.UI\Pair.cs" />
@@ -1205,6 +1204,7 @@
<Compile Include="System.Web.UI.WebControls\XmlBuilder.jvm.cs">
<SubType>Code</SubType>
</Compile>
+ <Compile Include="System.Web.UI\ClientScriptManager.jvm.cs" />
<Compile Include="System.Web.UI\BaseParser.jvm.cs">
<SubType>Code</SubType>
</Compile>
@@ -1269,6 +1269,7 @@
<Compile Include="System.Web\HttpApplication.cs" />
<Compile Include="System.Web\HttpCacheVaryByContentEncodings.cs" />
<Compile Include="System.Web\HttpParamsCollection.cs" />
+ <Compile Include="System.Web\HttpResponse.jvm.cs" />
<Compile Include="System.Web\HttpResponseStream.jvm.cs" />
<Compile Include="System.Web\HttpStaticObjectsCollection.cs">
<SubType>Code</SubType>
@@ -1404,9 +1405,13 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
- <Reference Include="J2EE.Helpers, Version=0.0.0.0, Culture=neutral,
processorArchitecture=MSIL" />
<Reference Include="J2SE.Helpers, Version=0.0.0.0, Culture=neutral,
processorArchitecture=MSIL" />
<Reference Include="JavaEE, Version=0.0.0.0, Culture=neutral,
processorArchitecture=MSIL" />
+ <Reference Include="jsf-api, Version=0.0.0.0, Culture=neutral,
processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>Refs\jsf-api.dll</HintPath>
+ <Private>False</Private>
+ </Reference>
<Reference Include="Mainsoft.Configuration, Version=1.0.0.0,
Culture=neutral, processorArchitecture=MSIL" />
<Reference Include="rt, Version=1.4.2.65535, Culture=neutral,
processorArchitecture=MSIL" />
<Reference Include="System, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" />
@@ -1434,10 +1439,10 @@
-->
<ProjectExtensions>
<VisualStudio>
- <UserProperties
REFS-RefInfo-mainsoft-mscorlib="repository:vmw:framework:2.0"
REFS-RefInfo-mainsoft-configuration="repository:vmw:framework:2.0"
REFS-JarPath-mainsoft-configuration=""
REFS-RefInfo-system-xml="repository:vmw:framework:2.0"
REFS-RefInfo-system-drawing="repository:vmw:framework:2.0"
REFS-RefInfo-system-data="repository:vmw:framework:2.0"
REFS-RefInfo-j2se-helpers="repository:vmw:framework:2.0"
REFS-RefInfo-system="repository:vmw:framework:2.0"
REFS-RefInfo-system-configuration="repository:vmw:framework:2.0"
REFS-RefInfo-j2ee-helpers="repository:vmw:framework:2.0"
REFS-RefInfo-javaee="repository:JavaEE:tomcat:1.3" REFS-JarPath-javaee=""
REFS-JarPath-j2se-helpers="" REFS-JarPath-j2ee-helpers=""
REFS-JarPath-j2ee="..\lib\j2ee.jar" REFS-RefInfo-rt="repository:jre:sun:1.4.2"
REFS-JarPath-rt="" REFS-JarPath-mscorlib="" REFS-JarPath-system=""
REFS-JarPath-system-xml="" REFS-JarPath-system-drawing=""
REFS-JarPath-system-data="" REFS-JarPath-system-configuration="
" />
+ <UserProperties REFS-RefInfo-jsf-api="j2il:"
REFS-JarPath-jsf-api="..\lib\jsf-api.jar" REFS-JarPath-system-configuration=""
REFS-JarPath-system-data="" REFS-JarPath-system-drawing=""
REFS-JarPath-system-xml="" REFS-JarPath-system="" REFS-JarPath-mscorlib=""
REFS-JarPath-rt="" REFS-RefInfo-rt="repository:jre:sun:1.4.2"
REFS-JarPath-j2ee="..\lib\j2ee.jar" REFS-JarPath-j2ee-helpers=""
REFS-JarPath-j2se-helpers="" REFS-JarPath-javaee=""
REFS-RefInfo-javaee="repository:JavaEE:tomcat:1.3"
REFS-RefInfo-j2ee-helpers="repository:vmw:framework:2.0"
REFS-RefInfo-system-configuration="repository:vmw:framework:2.0"
REFS-RefInfo-system="repository:vmw:framework:2.0"
REFS-RefInfo-j2se-helpers="repository:vmw:framework:2.0"
REFS-RefInfo-system-data="repository:vmw:framework:2.0"
REFS-RefInfo-system-drawing="repository:vmw:framework:2.0"
REFS-RefInfo-system-xml="repository:vmw:framework:2.0"
REFS-JarPath-mainsoft-configuration=""
REFS-RefInfo-mainsoft-configuration="repository:vmw:fram
ework:2.0" REFS-RefInfo-mainsoft-mscorlib="repository:vmw:framework:2.0" />
</VisualStudio>
</ProjectExtensions>
<PropertyGroup>
<PreBuildEvent>"$(ProjectDir)..\..\class\lib\net_2_0\culevel.exe" -o
"$(ProjectDir)System.Web\UplevelHelper.cs"
"$(ProjectDir)UplevelHelperDefinitions.xml"</PreBuildEvent>
</PropertyGroup>
-</Project>
\ No newline at end of file
+</Project>
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches