//
using vmw.@internal.j2ee;
-using javax.servlet.http;\r
-using System.Collections.Specialized;\r
+using javax.servlet.http;
+using System.Collections.Specialized;
+using System.Globalization;
using System.Web.Hosting;
+using System.Web.J2EE;
+using System.ComponentModel;
namespace System.Web.UI
{
public partial class Page
{
- internal string PostBackFunctionName {
+ 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;
+
+ bool _emptyPortletNamespace = false;
+ string _PortletNamespace = null;
+ bool _renderResponseInit = false;
+ IPortletRenderResponse _renderResponse = null;
+
+ internal string PortletNamespace
+ {
get {
-#if LATER // Enable when we fix the jscripts not to reference __doPostBack.
- IPortletRenderResponse resp = GetRenderResponse();
- if (resp != null)
- return "__doPostBack_" + resp.getNamespace();
-#endif
- return "__doPostBack";
+ 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 theForm {
+ get {
+ return "theForm" + PortletNamespace;
+ }
+ }
+
+ internal bool IsMultiForm {
+ get {
+ Mainsoft.Web.Configuration.PagesSection pageSection = (Mainsoft.Web.Configuration.PagesSection) System.Web.Configuration.WebConfigurationManager.GetSection ("mainsoft.web/pages");
+ if (pageSection != null)
+ return pageSection.MultiForm;
+ return false;
}
}
- // For J2EE portlets we load the view state from the render parameters
- WebROCollection LoadViewStateForPortlet(WebROCollection coll)
+ internal bool IsPortletRender
{
- IPortletRenderRequest renderRequest = Context.ServletRequest as IPortletRenderRequest;
- if (renderRequest != null && (coll == null || coll ["__VIEWSTATE"] == null)) {
- string mode = renderRequest.getPortletMode();
- string viewstate = Context.ServletRequest.getParameter("vmw.viewstate." + mode);
- if (viewstate != null) {
- if (coll == null)
- coll = new WebROCollection();
- else
- coll.Unprotect();
- coll["__VIEWSTATE"] = viewstate;
- coll.Protect();
- }
+ get {
+ return RenderResponse != null;
}
- return coll;
}
- internal bool SaveViewStateForNextPortletRender()
+ 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;
- if (IsPostBack && String.Compare (Request.HttpMethod, "POST", true) == 0 && !resp.isRedirected())
- resp.setRenderParameter("vmw.viewstate." + req.getPortletMode(), GetSavedViewState());
+ // 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() || resp.isRedirected();
+ 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];
+ }
}
}
}