You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2006/03/30 23:31:03 UTC

svn commit: r390244 - in /jakarta/tapestry/branches/4.0: framework/src/java/org/apache/tapestry/engine/EngineMessages.java portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java status.xml

Author: jkuhnert
Date: Thu Mar 30 13:31:02 2006
New Revision: 390244

URL: http://svn.apache.org/viewcvs?rev=390244&view=rev
Log:
Rapheal fixes

Modified:
    jakarta/tapestry/branches/4.0/framework/src/java/org/apache/tapestry/engine/EngineMessages.java
    jakarta/tapestry/branches/4.0/portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java
    jakarta/tapestry/branches/4.0/status.xml

Modified: jakarta/tapestry/branches/4.0/framework/src/java/org/apache/tapestry/engine/EngineMessages.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/branches/4.0/framework/src/java/org/apache/tapestry/engine/EngineMessages.java?rev=390244&r1=390243&r2=390244&view=diff
==============================================================================
--- jakarta/tapestry/branches/4.0/framework/src/java/org/apache/tapestry/engine/EngineMessages.java (original)
+++ jakarta/tapestry/branches/4.0/framework/src/java/org/apache/tapestry/engine/EngineMessages.java Thu Mar 30 13:31:02 2006
@@ -54,7 +54,7 @@
         return _formatter.format("exception-during-cleanup", cause);
     }
 
-    static String validateCycle(List pageNames)
+    public static String validateCycle(List pageNames)
     {
         StringBuffer buffer = new StringBuffer();
         int count = pageNames.size();

Modified: jakarta/tapestry/branches/4.0/portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/branches/4.0/portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java?rev=390244&r1=390243&r2=390244&view=diff
==============================================================================
--- jakarta/tapestry/branches/4.0/portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java (original)
+++ jakarta/tapestry/branches/4.0/portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java Thu Mar 30 13:31:02 2006
@@ -16,14 +16,19 @@
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
+import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IPage;
 import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.PageRedirectException;
 import org.apache.tapestry.Tapestry;
 import org.apache.tapestry.TapestryUtils;
 import org.apache.tapestry.asset.AssetFactory;
+import org.apache.tapestry.engine.EngineMessages;
 import org.apache.tapestry.markup.MarkupWriterSource;
 import org.apache.tapestry.util.ContentType;
 import org.apache.tapestry.util.PageRenderSupportImpl;
@@ -49,46 +54,88 @@
 
     public void renderPage(IRequestCycle cycle, String pageName) throws IOException
     {
-        cycle.activate(pageName);
-
-        IPage page = cycle.getPage();
-
-        ContentType contentType = page.getResponseContentType();
-
-        PrintWriter printWriter = _response.getPrintWriter(contentType);
-
-        IMarkupWriter writer = _markupWriterSource.newMarkupWriter(printWriter, contentType);
-
-        String namespace = _response.getNamespace();
-
-        PageRenderSupportImpl support = new PageRenderSupportImpl(_assetFactory, namespace, null);
-
-        TapestryUtils.storePageRenderSupport(cycle, support);
-
-        IMarkupWriter nested = writer.getNestedWriter();
-
-        cycle.renderPage(nested);
-
-        String id = "Tapestry Portlet " + _applicationId + " " + namespace;
-
-        writer.comment("BEGIN " + id);
-        writer.comment("Page: " + page.getPageName());
-        writer.comment("Generated: " + new Date());
-        writer.comment("Framework version: " + Tapestry.VERSION);
-
-        support.writeBodyScript(writer, cycle);
-
-        nested.close();
-
-        support.writeInitializationScript(writer);
-
-        writer.comment("END " + id);
-
-        writer.close();
-
-        // TODO: Trap errors and do some error reporting here?
+    	try {
+	        cycle.activate(pageName);
+	
+	        IPage page = cycle.getPage();
+	
+	        ContentType contentType = page.getResponseContentType();
+	
+	        PrintWriter printWriter = _response.getPrintWriter(contentType);
+	
+	        IMarkupWriter writer = _markupWriterSource.newMarkupWriter(printWriter, contentType);
+	
+	        String namespace = _response.getNamespace();
+	
+	        PageRenderSupportImpl support = new PageRenderSupportImpl(_assetFactory, namespace, null);
+	
+	        TapestryUtils.storePageRenderSupport(cycle, support);
+	
+	        IMarkupWriter nested = writer.getNestedWriter();
+	
+	        cycle.renderPage(nested);
+	
+	        String id = "Tapestry Portlet " + _applicationId + " " + namespace;
+	
+	        writer.comment("BEGIN " + id);
+	        writer.comment("Page: " + page.getPageName());
+	        writer.comment("Generated: " + new Date());
+	        writer.comment("Framework version: " + Tapestry.VERSION);
+	
+	        support.writeBodyScript(writer, cycle);
+	
+	        nested.close();
+	
+	        support.writeInitializationScript(writer);
+	
+	        writer.comment("END " + id);
+
+	        writer.close();
+	        
+	        // TODO: Trap errors and do some error reporting here?
+    	}
+    	catch (PageRedirectException e) {
+    		handlePageRedirectException(cycle, e);
+    	}
     }
 
+    protected void handlePageRedirectException(IRequestCycle cycle, PageRedirectException exception)
+		throws IOException
+	{
+		List pageNames = new ArrayList();
+		
+		String pageName = exception.getTargetPageName();
+		
+		while (true)
+		{
+		    if (pageNames.contains(pageName))
+		    {
+		        pageNames.add(pageName);
+		
+		        throw new ApplicationRuntimeException(EngineMessages.validateCycle(pageNames));
+		    }
+		
+		    // Record that this page has been a target.
+		
+		    pageNames.add(pageName);
+		
+		    try
+		    {
+		        // Attempt to activate the new page.
+		
+		        cycle.activate(pageName);
+		
+		        break;
+		    }
+		    catch (PageRedirectException secondRedirectException)
+		    {
+		        pageName = secondRedirectException.getTargetPageName();
+		    }
+		}
+		
+		renderPage(cycle, pageName);
+	}
+    
     public void setMarkupWriterSource(MarkupWriterSource markupWriterSource)
     {
         _markupWriterSource = markupWriterSource;

Modified: jakarta/tapestry/branches/4.0/status.xml
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/branches/4.0/status.xml?rev=390244&r1=390243&r2=390244&view=diff
==============================================================================
--- jakarta/tapestry/branches/4.0/status.xml (original)
+++ jakarta/tapestry/branches/4.0/status.xml Thu Mar 30 13:31:02 2006
@@ -181,6 +181,9 @@
       <action type="fix" dev="PF" fixes-bug="TAPESTRY-774" due-to="Mikaël Cluseau">
         PopupLinkRenderer fails in Form rewind.
       </action>
+      <action type="fix" dev="JK" fixes-bug="TAPESTRY-855" due-to="Raphael Jean" >
+        Throwing a PageRedirectException from the pageBeginRender() method in a portlet page doesn't redirect to the given page. Instead a NPE is thrown and the exception page is displayed. 
+      </action>
     </release>
     <release version="4.0" date="Jan 6 2006">
       <action type="update" dev="HLS">Add link to DeveloperWorks Tapestry article</action>



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org