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 2007/11/01 10:15:32 UTC

svn commit: r590943 - /wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java

Author: knopp
Date: Thu Nov  1 02:15:32 2007
New Revision: 590943

URL: http://svn.apache.org/viewvc?rev=590943&view=rev
Log:
WICKET-1101

Modified:
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java?rev=590943&r1=590942&r2=590943&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/coding/HybridUrlCodingStrategy.java Thu Nov  1 02:15:32 2007
@@ -26,6 +26,7 @@
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.RequestCycle;
 import org.apache.wicket.Session;
+import org.apache.wicket.protocol.http.WebRequest;
 import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy;
 import org.apache.wicket.request.RequestParameters;
 import org.apache.wicket.request.target.component.BookmarkableListenerInterfaceRequestTarget;
@@ -70,7 +71,7 @@
 	 *            redirected to hybrid URL - needed for ajax to work properly after page refresh
 	 */
 	public HybridUrlCodingStrategy(String mountPath, Class pageClass,
-			boolean redirectOnBookmarkableRequest)
+		boolean redirectOnBookmarkableRequest)
 	{
 		super(mountPath);
 		pageClassRef = new WeakReference(pageClass);
@@ -132,7 +133,7 @@
 		// returns true if the pageId is unique, so we can get rid of the
 		// pageMap name in the url this way
 		return Application.exists() &&
-				Application.get().getSessionSettings().isPageIdUniquePerSession();
+			Application.get().getSessionSettings().isPageIdUniquePerSession();
 	}
 
 	/**
@@ -152,7 +153,7 @@
 
 		// decode parameters
 		PageParameters parameters = new PageParameters(decodeParameters(extraction
-				.getUrlAfterExtraction(), requestParameters.getParameters()));
+			.getUrlAfterExtraction(), requestParameters.getParameters()));
 
 		if (requestParameters.getPageMapName() == null)
 		{
@@ -167,12 +168,12 @@
 		// bookmarkable page, or a request to a stateless page (in which case a
 		// wicket:interface parameter should be available
 		final String interfaceParameter = (String)parameters
-				.remove(WebRequestCodingStrategy.INTERFACE_PARAMETER_NAME);
+			.remove(WebRequestCodingStrategy.INTERFACE_PARAMETER_NAME);
 
 		// we need to remember the amount of trailing slashes after the redirect
 		// (otherwise we'll break relative urls)
 		int originalUrlTrailingSlashesCount = getTrailingSlashesCount(extraction
-				.getUrlAfterExtraction());
+			.getUrlAfterExtraction());
 
 		boolean redirect = isRedirectOnBookmarkableRequest();
 		if (Strings.isEmpty(pageMapName) != true && alwaysRedirectWhenPageMapIsSpecified())
@@ -185,14 +186,14 @@
 			// stateless listener interface
 			WebRequestCodingStrategy.addInterfaceParameters(interfaceParameter, requestParameters);
 			return new BookmarkableListenerInterfaceRequestTarget(pageMapName, (Class)pageClassRef
-					.get(), parameters, requestParameters.getComponentPath(), requestParameters
-					.getInterfaceName(), requestParameters.getVersionNumber());
+				.get(), parameters, requestParameters.getComponentPath(), requestParameters
+				.getInterfaceName(), requestParameters.getVersionNumber());
 		}
 		else if (pageId == null)
 		{
 			// bookmarkable page request
 			return new HybridBookmarkablePageRequestTarget(pageMapName, (Class)pageClassRef.get(),
-					parameters, originalUrlTrailingSlashesCount, redirect);
+				parameters, originalUrlTrailingSlashesCount, redirect);
 		}
 		else
 		// hybrid url
@@ -200,15 +201,15 @@
 			Page page;
 
 			if (Strings.isEmpty(pageMapName) && Application.exists() &&
-					Application.get().getSessionSettings().isPageIdUniquePerSession())
+				Application.get().getSessionSettings().isPageIdUniquePerSession())
 			{
 				page = Session.get().getPage(pageId.intValue(),
-						pageVersion != null ? pageVersion.intValue() : 0);
+					pageVersion != null ? pageVersion.intValue() : 0);
 			}
 			else
 			{
 				page = Session.get().getPage(pageMapName, "" + pageId,
-						pageVersion != null ? pageVersion.intValue() : 0);
+					pageVersion != null ? pageVersion.intValue() : 0);
 			}
 
 			// check if the found page match the required class
@@ -223,7 +224,7 @@
 				// we didn't find the page, act as bookmarkable page request -
 				// create new instance
 				return new HybridBookmarkablePageRequestTarget(pageMapName, (Class)pageClassRef
-						.get(), parameters, originalUrlTrailingSlashesCount, redirect);
+					.get(), parameters, originalUrlTrailingSlashesCount, redirect);
 			}
 		}
 
@@ -297,7 +298,7 @@
 			ListenerInterfaceRequestTarget target = (ListenerInterfaceRequestTarget)requestTarget;
 			Page page = target.getPage();
 			return new PageInfo(new Integer(page.getNumericId()), new Integer(page
-					.getCurrentVersionNumber()), page.getPageMapName());
+				.getCurrentVersionNumber()), page.getPageMapName());
 		}
 		else
 		{
@@ -431,7 +432,7 @@
 		{
 			ListenerInterfaceRequestTarget target = (ListenerInterfaceRequestTarget)requestTarget;
 			return target.getPage().getClass().equals(pageClassRef.get()) &&
-					target.getRequestListenerInterface().equals(IRedirectListener.INTERFACE);
+				target.getRequestListenerInterface().equals(IRedirectListener.INTERFACE);
 		}
 		return false;
 	}
@@ -491,11 +492,11 @@
 		{
 			lastSubstring = url.substring(begin);
 			if (lastSubstring.length() > getBeginSeparator().length() + getEndSeparator().length() &&
-					lastSubstring.startsWith(getBeginSeparator()) &&
-					lastSubstring.endsWith(getEndSeparator()))
+				lastSubstring.startsWith(getBeginSeparator()) &&
+				lastSubstring.endsWith(getEndSeparator()))
 			{
 				String pageInfoString = lastSubstring.substring(getBeginSeparator().length(), //
-						lastSubstring.length() - getEndSeparator().length());
+					lastSubstring.length() - getEndSeparator().length());
 				PageInfo info = PageInfo.parsePageInfo(pageInfoString);
 				last = info;
 			}
@@ -562,10 +563,10 @@
 		public PageInfo(Integer pageId, Integer versionNumber, String pageMapName)
 		{
 			if ((pageId == null && (versionNumber != null || pageMapName == null)) ||
-					(versionNumber == null && (pageId != null || pageMapName == null)))
+				(versionNumber == null && (pageId != null || pageMapName == null)))
 			{
 				throw new IllegalArgumentException(
-						"Either both pageId and versionNumber must be null or none of them.");
+					"Either both pageId and versionNumber must be null or none of them.");
 			}
 			this.pageId = pageId;
 			this.versionNumber = versionNumber;
@@ -618,7 +619,7 @@
 			// we don't need to encode the pageMapName when the pageId is unique
 			// per session
 			if (pageMapName != null && pageId != null && Application.exists() &&
-					Application.get().getSessionSettings().isPageIdUniquePerSession())
+				Application.get().getSessionSettings().isPageIdUniquePerSession())
 			{
 				pageMapName = null;
 			}
@@ -730,7 +731,7 @@
 			{
 				// pageId:pageVersion
 				return new PageInfo(Integer.valueOf(segments[0]), Integer.valueOf(segments[1]),
-						null);
+					null);
 			}
 			else if (segments.length == 1 && !isNumber(segments[0]))
 			{
@@ -760,7 +761,7 @@
 				{
 					// pageMapName.pageId.pageVersion
 					return new PageInfo(Integer.valueOf(segments[1]), Integer.valueOf(segments[2]),
-							segments[0]);
+						segments[0]);
 				}
 			}
 
@@ -790,7 +791,7 @@
 		 * @param redirect
 		 */
 		public HybridBookmarkablePageRequestTarget(String pageMapName, Class pageClass,
-				PageParameters pageParameters, int originalUrlTrailingSlashesCount, boolean redirect)
+			PageParameters pageParameters, int originalUrlTrailingSlashesCount, boolean redirect)
 		{
 			super(pageMapName, pageClass, pageParameters);
 			this.originalUrlTrailingSlashesCount = originalUrlTrailingSlashesCount;
@@ -802,22 +803,20 @@
 			Page page = super.newPage(pageClass, requestCycle);
 			page.setMetaData(PAGE_PARAMETERS_META_DATA_KEY, getPageParameters());
 			page.setMetaData(ORIGINAL_TRAILING_SLASHES_COUNT_METADATA_KEY, new Integer(
-					originalUrlTrailingSlashesCount));
+				originalUrlTrailingSlashesCount));
 			return page;
 		}
 
 		public void respond(RequestCycle requestCycle)
 		{
+			Page page = getPage(requestCycle);
+			if (page.isPageStateless() == false && redirect)
 			{
-				Page page = getPage(requestCycle);
-				if (page.isPageStateless() == false && redirect)
-				{
-					requestCycle.redirectTo(page);
-				}
-				else
-				{
-					super.respond(requestCycle);
-				}
+				requestCycle.redirectTo(page);
+			}
+			else
+			{
+				super.respond(requestCycle);
 			}
 		}
 	};
@@ -827,6 +826,16 @@
 	 */
 	public boolean matches(String path)
 	{
+		RequestCycle rc = RequestCycle.get();
+
+		// the null check is necessary, as this method is first time called from WicketFilter when
+		// no RequestCycle exists yet
+		if (rc != null && ((WebRequest)rc.getRequest()).isAjax())
+		{
+			// HybridUrlCodingStrategy doesn't make sense for ajax request
+			return false;
+		}
+
 		if (path.startsWith(getMountPath()))
 		{
 			/*
@@ -842,11 +851,10 @@
 			 * We also need to accept /mount/point(XXX)
 			 */
 			if (remainder.length() > getBeginSeparator().length() + getEndSeparator().length() &&
-					remainder.startsWith(getBeginSeparator()) &&
-					remainder.endsWith(getEndSeparator()))
+				remainder.startsWith(getBeginSeparator()) && remainder.endsWith(getEndSeparator()))
 			{
 				String substring = remainder.substring(getBeginSeparator().length(), //
-						remainder.length() - getEndSeparator().length());
+					remainder.length() - getEndSeparator().length());
 				PageInfo info = PageInfo.parsePageInfo(substring);
 				if (info != null)
 				{