You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2008/08/28 16:16:24 UTC

svn commit: r689833 - in /wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng: AjaxBehavior.java AjaxEventBehavior.java AjaxRequestAttributes.java js/wicket-ajax-ng.js

Author: knopp
Date: Thu Aug 28 07:16:23 2008
New Revision: 689833

URL: http://svn.apache.org/viewvc?rev=689833&view=rev
Log:
isForcePost

Modified:
    wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxBehavior.java
    wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxEventBehavior.java
    wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributes.java
    wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxBehavior.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxBehavior.java?rev=689833&r1=689832&r2=689833&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxBehavior.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxBehavior.java Thu Aug 28 07:16:23 2008
@@ -269,6 +269,18 @@
 		}
 	}
 
+	private Object renderBoolean(Boolean b)
+	{
+		if (b != null && b == true)
+		{
+			return 1;
+		}
+		else
+		{
+			return null;
+		}
+	}
+	
 	private void renderAttributes(Component component, AjaxRequestAttributes attributes,
 		JSONObject o)
 	{
@@ -276,13 +288,14 @@
 		{
 			o.put("f", attributes.getForm().getMarkupId());
 		}
-		o.put("m", attributes.isMultipart());
+		o.put("m", renderBoolean(attributes.isMultipart()));
+		o.put("fp", renderBoolean(attributes.isForcePost()));
 		o.put("rt", attributes.getRequesTimeout());
 		o.put("pt", attributes.getProcessingTimeout());
 		o.put("t", attributes.getToken());
-		o.put("r", attributes.isRemovePrevious());
+		o.put("r", renderBoolean(attributes.isRemovePrevious()));
 		o.put("th", attributes.getThrottle());
-		o.put("thp", attributes.isThrottlePostpone());
+		o.put("thp", renderBoolean(attributes.isThrottlePostpone()));
 
 		renderFunctionList(o, "pr", attributes.getPreconditions());
 		renderFunctionList(o, "be", attributes.getBeforeHandlers());

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxEventBehavior.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxEventBehavior.java?rev=689833&r1=689832&r2=689833&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxEventBehavior.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxEventBehavior.java Thu Aug 28 07:16:23 2008
@@ -59,14 +59,14 @@
 		js.append("',");
 		js.append(renderAttributes(component));
 		
-		boolean allowDefault = getAttributes().allowDefault(); 
+		boolean allowDefault = getAttributes().isAllowDefault(); 
 		if (allowDefault)
 		{
 			js.append("," + allowDefault);
 		}
-		js.append(")");
+		js.append(")");				
 
-		response.renderOnDomReadyJavascript(js.toString());
+		response.renderOnDomReadyJavascript(decorateScript(js).toString());
 	}
 	
 }

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributes.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributes.java?rev=689833&r1=689832&r2=689833&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributes.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestAttributes.java Thu Aug 28 07:16:23 2008
@@ -126,7 +126,8 @@
 	 * Note that for multipart AJAX requests a hidden IFRAME will be used and that can have negative
 	 * impact on error detection.
 	 * 
-	 * @return <code>true</code> if the form submit should be multipart, false otherwise
+	 * @return <code>true</code> if the form submit should be multipart, <code>false</code>
+	 *         otherwise
 	 */
 	public Boolean isMultipart()
 	{
@@ -141,6 +142,27 @@
 	}
 
 	/**
+	 * Returns whether the Ajax request should be a <code>POST</code> regardless of whether a form
+	 * is being submitted.
+	 * <p> 
+	 * For a <code>POST</code>request all URL arguments are submitted as body. This can be useful
+	 * if the URL parameters are longer than maximal URL length.
+	 * 
+	 * @return <code>true</code> if the request should be post, <code>false</code> otherwise.
+	 */
+	public Boolean isForcePost()
+	{
+		if (delegate != null)
+		{
+			return delegate.isForcePost();
+		}
+		else
+		{
+			return null;
+		}
+	}
+
+	/**
 	 * Timeout in milliseconds for the AJAX request. This only involves the actual communication and
 	 * not the processing afterwards. Can be <code>null</code> in which case the default request
 	 * timeout will be used.
@@ -528,18 +550,18 @@
 	/**
 	 * Only applies for event behaviors. Returns whether the behavior should allow the default event
 	 * handler to be invoked. For example if the behavior is attached to a link and
-	 * {@link #allowDefault()} returns <code>false</code> (which is default value), the link's URL
-	 * will not be followed. If {@link #allowDefault()} returns <code>true</code>, the link URL
-	 * will be loaded (and the onclick handler fired if there is any).
+	 * {@link #isAllowDefault()} returns <code>false</code> (which is default value), the link's
+	 * URL will not be followed. If {@link #isAllowDefault()} returns <code>true</code>, the link
+	 * URL will be loaded (and the onclick handler fired if there is any).
 	 * 
 	 * @return <code>true</code> if the default event handler should be invoked,
 	 *         <code>false</code> otherwise.
 	 */
-	public boolean allowDefault()
+	public boolean isAllowDefault()
 	{
 		if (delegate != null)
 		{
-			return delegate.allowDefault();
+			return delegate.isAllowDefault();
 		}
 		else
 		{

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js?rev=689833&r1=689832&r2=689833&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js Thu Aug 28 07:16:23 2008
@@ -205,7 +205,7 @@
 	
 	var logger = DummyLogger;		
 	
-	if (typeof(console) !== "undefined" && L.isFunction(console.log) && logger === DummyLogger)
+	if (!UA.webkit && typeof(window.console) !== "undefined" && L.isFunction(console.log) && logger === DummyLogger)
 	{		
 		logger = FirebugLogger;
 		
@@ -1376,6 +1376,9 @@
 	 *                                        negative impact on error detection.
 	 *                                        (doesn't work with current YUI 3 PR1 release)
 	 *                                         
+     *   fp, forcePost           - Boolean    Optional. Whether the request should be post even if no form
+     *                                        is specified. Defaults to false.
+     *                                        
 	 *   rt, requestTimeout       - Integer   Timeout in milliseconds for the AJAX request. This only 
 	 *                                        involves the actual communication and not the processing 
 	 *                                        afterwards. Can be null in which case the default request
@@ -1449,18 +1452,19 @@
 	 *                                        argument. If possible error message will be second argument 
 	 *                                        passed to the handlers. 
 	 *                                        	                                         
-     *   u, urlArguments        - Object      Optional. Map that contains additional URL arguments. These 
+     *   u, urlArguments         - Object     Optional. Map that contains additional URL arguments. These 
      *                                        will be appended to the URL. This is simpler alternative to 
      *                                        urlArgumentMethods.
      *                                        
-     *   ua, urlArgumentMethods - Method(s)   Optional. Method or array of methods that produce additional 
+     *   ua, urlArgumentMethods  - Method(s)  Optional. Method or array of methods that produce additional 
      *                                        URL arguments. Each of the methods will get this 
      *                                        RequestQueueItem passed and must return a 
      *                                        Map<String, String> (Object).
      *                                        
-     *   rqi, requestQueueItem  - Method(s)   Optional. Method or array of methods that will be invoked
+     *   rqi, requestQueueItem   - Method(s)  Optional. Method or array of methods that will be invoked
      *                                        after the RequestQueueItem instance is created. The methods 
      *                                        will get the request queue instance passed as first argument.
+     *                                        
 	 */
 	var RequestQueueItem = function(attributes)
 	{
@@ -1495,6 +1499,7 @@
 			component:            a.component          || a.c    || null,
 			formId:               a.formId             || a.f    || null,
 			multipart:          b(a.multipart          || a.m),
+			forcePost:          b(a.forcePost          || a.fp),
 			requestTimeout:       a.requestTimeout     || a.rt   || gs.defaultRequestTimeout,
 			processingTimeout:    a.processingTimeout  || a.pt   || gs.defaultProcessingTimeout,
 			pageId:               a.pageId             || a.p    || gs.defaultPageId,
@@ -1685,54 +1690,7 @@
 				this.next = null;
 			}
 		},
-		
-		defaultUrlParameters: function()
-		{
-			var a = this.attributes;
-			var componentId = (a.component == null) ? null : (W.$(a.component).getAttribute("id"));
-			var res = {};
-			var gs = W.ajax.globalSettings;
-			res[gs.urlParamComponentId] = componentId;
-			res[gs.urlParamPageId] = a.pageId;
-			res[gs.urlParamFormId] = a.formId;
-			res[gs.urlParamListenerInterface] = a.listenerInterface;
-			res[gs.urlParamBehaviorIndex] = a.behaviorIndex;
-			return res;
-		},
-		
-		buildUrl: function() 
-		{
-			var url = W.ajax.globalSettings.urlPrefix;
-			var a = this.attributes;
-			
-			var params = new Object();
-			
-			if (a.urlArguments != null)
-			{				
-				appendMap(params, a.urlArguments);
-			}
-			for (var i = 0; i < a.urlArgumentMethods.length; ++i)
-			{
-				var m = a.urlArgumentMethods[i](this);
-				if (L.isObject(m))
-				{
-					appendMap(params, m);
-				}
-			}
-			
-			appendMap(params, this.defaultUrlParameters());
-			
-			var paramsString = mapToUrlParameters(params); 
-			
-			if (paramsString.length > 0)
-			{
-				url += "?";
-				url += paramsString;
-			}
-			
-			return url;
-		},
-		
+				
 		parseHeaderContribution: function(header)
 		{
 			var s = "<head>" + header + "</head>";
@@ -1976,14 +1934,78 @@
 			this.failure();
 		},
 		
-		getRequestCfg: function(url) 
+		defaultUrlParameters: function()
 		{
 			var a = this.attributes;
+			var componentId = (a.component == null) ? null : (W.$(a.component).getAttribute("id"));
+			var res = {};
+			var gs = W.ajax.globalSettings;
+			res[gs.urlParamComponentId] = componentId;
+			res[gs.urlParamPageId] = a.pageId;
+			res[gs.urlParamFormId] = a.formId;
+			res[gs.urlParamListenerInterface] = a.listenerInterface;
+			res[gs.urlParamBehaviorIndex] = a.behaviorIndex;
+			return res;
+		},
+		
+		buildUrl: function()
+		{
+			var url = W.ajax.globalSettings.urlPrefix;
+			var stamp = "" + (reqCount ++) + (Math.ceil(Math.random() * 10000));
+			if (url.indexOf("?") == -1)
+			{
+				url += "?";
+			}
+			else
+			{
+				url += "&";
+			}
+			url += W.ajax.globalSettings.urlParamTimestamp;
+			url += "=";
+			url += stamp;			
+			return url;
+		},
+		
+		buildUrlParameters: function() 
+		{			
+			var a = this.attributes;
+			
+			var params = new Object();
+			
+			if (a.urlArguments != null)
+			{				
+				appendMap(params, a.urlArguments);
+			}
+			for (var i = 0; i < a.urlArgumentMethods.length; ++i)
+			{
+				var m = a.urlArgumentMethods[i](this);
+				if (L.isObject(m))
+				{
+					appendMap(params, m);
+				}
+			}
+			
+			appendMap(params, this.defaultUrlParameters());
+			
+			return mapToUrlParameters(params); 			
+		},
+		
+		getRequestCfg: function(urlParameters) 
+		{
+			var a = this.attributes;
+			
 			var m = a.formId != null ? "POST" : "GET";
+			
+			if (m == "GET" && a.forcePost == true)
+			{
+				m = "POST";
+			}			
+			
 			var f = a.formId != null ? { id:a.formId } : null;
 			var res = 
 			{
 				method: m,
+				data: urlParameters,
 				on: 
 				{
 					success: bind(this.onSuccess, this),
@@ -2001,8 +2023,9 @@
 			this.invokeBeforeHandlers();			
 			this.next = next;
 
+			var urlParameters = this.buildUrlParameters();
 			var url = this.buildUrl();
-			var cfg = this.getRequestCfg(url);
+			var cfg = this.getRequestCfg(urlParameters);
 			
 			log.info("RequestQueue", "Initiating AJAX Request on ", url, " with configuration ", cfg);
 			
@@ -2175,9 +2198,7 @@
 	
 	var defaultArgumentMethod = function(item)
 	{
-		var stamp = "" + (reqCount ++) + (Math.ceil(Math.random() * 10000));
 		var res = {};
-		res[W.ajax.globalSettings.urlParamTimestamp] = stamp;			
 		res[W.ajax.globalSettings.urlParamUrlDepth] = W.ajax.globalSettings.urlDepthValue;
 		res["wicket:ajax"] = true;
 		return res;