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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to