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/09/18 14:47:37 UTC

svn commit: r696648 - in /wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl: RedirectToRenderPageRequestHandler.java RenderPageRequestHandler.java

Author: knopp
Date: Thu Sep 18 05:47:37 2008
New Revision: 696648

URL: http://svn.apache.org/viewvc?rev=696648&view=rev
Log:
clean up

Removed:
    wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/RedirectToRenderPageRequestHandler.java
Modified:
    wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/RenderPageRequestHandler.java

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/RenderPageRequestHandler.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/RenderPageRequestHandler.java?rev=696648&r1=696647&r2=696648&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/RenderPageRequestHandler.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/impl/RenderPageRequestHandler.java Thu Sep 18 05:47:37 2008
@@ -29,26 +29,44 @@
 import org.apache.wicket.settings.IRequestCycleSettings;
 
 /**
- * {@link RequestHandler} that renders page instance. Depending on the <code>preventRedirect</code>
+ * {@link RequestHandler} that renders page instance. Depending on the <code>redirectPolicy</code>
  * flag and current request strategy the handler either just renders the page to the response, or
  * redirects to render the page. <code>REDIRECT_TO_BUFFER</code> strategy is also supported.
  * <p>
- * The redirect be issued if all of the following statements are true
- * <ul>
- * 	<li>request cycle strategy is not ONE_PASS_RENDER 
- *  <li>preventRedirect flag is not set
- *  <li>current request URL is different than page URL
- *  <li>page being rendered is not stateless
- *  
- * </ul>
- * 
  * 
  * @author Matej Knopp
  */
 public class RenderPageRequestHandler implements PageRequestHandler
 {
 	private final IPage page;
-	private final boolean preventRedirect;
+	private final RedirectPolicy redirectPolicy;
+
+	/**
+	 * Determines whether Wicket does a redirect when rendering a page
+	 * 
+	 * @author Matej Knopp
+	 */
+	public enum RedirectPolicy {
+		/**
+		 * Always redirect if current request URL is different than page URL.
+		 */
+		ALWAYS_REDIRECT,
+
+		/**
+		 * Never redirect - always render the page to current response.
+		 */
+		NEVER_REDIRECT,
+
+		/**
+		 * Redirect if necessary. The redirect will happen when all of the following conditions are
+		 * met:
+		 * <ul>
+		 * <li>current request URL is different than page URL
+		 * <li>page is not stateless
+		 * <li>render strategy is either REDIRECT_TO_BUFFER or REDIRECT_TO_RENDER </li>
+		 */
+		AUTO_REDIRECT
+	};
 
 	/**
 	 * Construct. Renders the page with a redirect if necessary.
@@ -57,25 +75,26 @@
 	 */
 	public RenderPageRequestHandler(IPage page)
 	{
-		this(page, false);
+		this(page, RedirectPolicy.AUTO_REDIRECT);
 	}
 
 	/**
 	 * Construct.
 	 * 
 	 * @param page
-	 * @param preventRedirect
-	 *            If <code>true</code> the page is always rendered to current response. If
-	 *            <code>false</code> a redirect will be issued if required by the request
-	 *            strategy.
+	 * @param redirectPolicy
 	 */
-	public RenderPageRequestHandler(IPage page, boolean preventRedirect)
+	public RenderPageRequestHandler(IPage page, RedirectPolicy redirectPolicy)
 	{
 		if (page == null)
 		{
 			throw new IllegalArgumentException("Argument 'page' may not be null.");
 		}
-		this.preventRedirect = preventRedirect;
+		if (redirectPolicy == null)
+		{
+			throw new IllegalArgumentException("Argument 'redirectPolicy' may no be null.");
+		}
+		this.redirectPolicy = redirectPolicy;
 		this.page = page;
 	}
 
@@ -84,6 +103,16 @@
 		return page;
 	}
 
+	/**
+	 * Returns the {@link RedirectPolicy}
+	 * 
+	 * @return redirect policy
+	 */
+	public RedirectPolicy getRedirectPolicy()
+	{
+		return redirectPolicy;
+	}
+
 	public void detach(RequestCycle requestCycle)
 	{
 		page.detach();
@@ -177,22 +206,25 @@
 
 		if (bufferedResponse != null)
 		{
+			// if there is saved response for this URL render it
 			bufferedResponse.writeTo((WebResponse)requestCycle.getResponse());
 		}
-		else if (preventRedirect || isOnePassRender() || targetUrl.equals(currentUrl) ||
-			(isRedirectToRender() && page.isPageStateless()))
+		else if (redirectPolicy == RedirectPolicy.NEVER_REDIRECT || isOnePassRender() ||
+			targetUrl.equals(currentUrl) || (isRedirectToRender() && page.isPageStateless()))
 		{
-			// if the flag is set or one pass render model is on or the targetUrl matches current
-			// url just render the page
+			// if the policy is never to redirect
+			//   or one pass render mode is on 
+			//   or the targetUrl matches current url 
+			// just render the page
 			renderPage();
 		}
-		else if (isRedirectToRender())
-		{
+		else if (redirectPolicy == RedirectPolicy.ALWAYS_REDIRECT || isRedirectToRender())
+		{			
 			redirectTo(targetUrl, requestCycle);
 		}
-		else
-		// redirect to buffer
+		else		
 		{
+			// redirect to buffer
 			BufferedWebResponse response = renderPage(targetUrl, requestCycle);
 
 			// check if the url hasn't changed after page has been rendered
@@ -207,17 +239,17 @@
 				// segments for stateless and stateful pages
 				response = renderPage(targetUrl2, requestCycle);
 			}
-			
+
 			if (page.isPageStateless() && !enableRedirectForStatelessPage())
 			{
 				// we don't want the redirect to happen for stateless page
 				// example:
-				//   when a normal mounted stateful page is hit at /mount/point
-				//   wicket renders the page to buffer and redirects to /mount/point?12
-				//   but for stateless page the redirect is not necessary
-				//   also for listener interface on stateful page we want to redirect 
-				//   after the listener is invoked, but on stateless page the user 
-				//   must ask for redirect explicitely  
+				// when a normal mounted stateful page is hit at /mount/point
+				// wicket renders the page to buffer and redirects to /mount/point?12
+				// but for stateless page the redirect is not necessary
+				// also for listener interface on stateful page we want to redirect
+				// after the listener is invoked, but on stateless page the user
+				// must ask for redirect explicitely
 				response.writeTo((WebResponse)requestCycle.getResponse());
 			}
 			else
@@ -233,7 +265,7 @@
 	 * When the page renders to buffer and it is still stateless after rendering, this flag
 	 * determines whether the redirect will take place or not.
 	 * <p>
-	 * Normally there is no reason for a stateless page to redirect 
+	 * Normally there is no reason for a stateless page to redirect
 	 * 
 	 * @return boolean value
 	 */