Author: hlship
Date: Fri Oct 31 13:54:25 2008
New Revision: 709564

URL: http://svn.apache.org/viewvc?rev=709564&view=rev
Log:
TAP5-187: Ajax event handler methods that return a page instance, page class or 
page name should cause the client to redirect to that page

Added:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageClassComponentEventResultProcessor.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameComponentEventResultProcessor.java
      - copied, changed from r704144, 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StringResultProcessor.java
Removed:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StringResultProcessor.java
Modified:
    tapestry/tapestry5/trunk/src/site/apt/guide/ajax.apt
    tapestry/tapestry5/trunk/src/site/apt/index.apt
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessor.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
    tapestry/tapestry5/trunk/tapestry-core/src/test/app1/nested/ZoneDemo.tml
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/nested/ZoneDemo.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessorTest.java

Modified: tapestry/tapestry5/trunk/src/site/apt/guide/ajax.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/guide/ajax.apt?rev=709564&r1=709563&r2=709564&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/src/site/apt/guide/ajax.apt (original)
+++ tapestry/tapestry5/trunk/src/site/apt/guide/ajax.apt Fri Oct 31 13:54:25 
2008
@@ -249,6 +249,12 @@
   This return value should be an injected component or block.  The value will 
be rendered, and that
   markup will be used on the client side to update the Zone's \<div\>.
 
+  An event handler may return a
+  {{{../apidocs/org/apache/tapestry5/Link.html}Link}} and the client will be 
redirected to that link.
+
+  Returning a page name (as a String), or a page class, or a page instance 
will also send a redirect
+  to the indicated page.
+
 ** Graceful Degradation
 
   Users who do not have JavaScript enabled may click ActionLinks that are 
configured to update a Zone.

Modified: tapestry/tapestry5/trunk/src/site/apt/index.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/index.apt?rev=709564&r1=709563&r2=709564&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/src/site/apt/index.apt (original)
+++ tapestry/tapestry5/trunk/src/site/apt/index.apt Fri Oct 31 13:54:25 2008
@@ -68,6 +68,9 @@
 
 New And Of Note
 
+  * Event handler methods for Ajax requests may now return a page name, page 
class or page instance to force
+    the browser to redirect to the page.
+
   * The Inject and InjectService annotations may now be used on fields of 
service implementations or other
     objects constructed by the IoC container. In the past, injections only 
occured through method or
     constructor parameters.

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessor.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessor.java?rev=709564&r1=709563&r2=709564&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessor.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessor.java
 Fri Oct 31 13:54:25 2008
@@ -18,6 +18,7 @@
 import org.apache.tapestry5.internal.structure.Page;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.RenderCommand;
+import org.apache.tapestry5.services.Ajax;
 import org.apache.tapestry5.services.ComponentEventResultProcessor;
 
 import java.io.IOException;
@@ -29,29 +30,39 @@
 {
     private final RequestPageCache cache;
 
-    private final PageRenderQueue pageRenderQueue;
+    private final ComponentEventResultProcessor masterProcessor;
 
-    public AjaxComponentInstanceEventResultProcessor(RequestPageCache cache, 
PageRenderQueue pageRenderQueue)
+    public AjaxComponentInstanceEventResultProcessor(RequestPageCache cache,
+                                                     @Ajax 
ComponentEventResultProcessor masterProcessor)
     {
         this.cache = cache;
-        this.pageRenderQueue = pageRenderQueue;
+        this.masterProcessor = masterProcessor;
     }
 
     public void processResultValue(Component value) throws IOException
     {
         ComponentResources resources = value.getComponentResources();
 
+        boolean isPage = value == resources.getPage();
+
         String pageName = resources.getPageName();
 
+        if (isPage)
+        {
+            // This will ultimately send a JSON response to redirect to the 
page
+
+            masterProcessor.processResultValue(pageName);
+            return;
+        }
+
+        // Otherwise, a component within a page.
+
         Page page = cache.get(pageName);
 
         String nestedId = resources.getNestedId();
 
-        // The user may return a complete page instance, which isn't really a 
partial render, I guess.
-        // Depends on the structure of the page returned.
-
-        RenderCommand command = nestedId == null ? page.getRootElement() : 
page.getComponentElementByNestedId(nestedId);
+        RenderCommand command = page.getComponentElementByNestedId(nestedId);
 
-        pageRenderQueue.initializeForPartialPageRender(command);
+        masterProcessor.processResultValue(command);
     }
 }

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java?rev=709564&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java
 Fri Oct 31 13:54:25 2008
@@ -0,0 +1,44 @@
+//  Copyright 2008 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.services;
+
+import org.apache.tapestry5.Link;
+import org.apache.tapestry5.json.JSONObject;
+import org.apache.tapestry5.services.Ajax;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+
+import java.io.IOException;
+
+/**
+ * Handles [EMAIL PROTECTED] org.apache.tapestry5.Link} result types by 
building a JSON response with key "redirectURL".
+ */
+public class AjaxLinkComponentEventResultProcessor implements 
ComponentEventResultProcessor<Link>
+{
+    private final ComponentEventResultProcessor masterProcessor;
+
+    public AjaxLinkComponentEventResultProcessor(@Ajax 
ComponentEventResultProcessor masterProcessor)
+    {
+        this.masterProcessor = masterProcessor;
+    }
+
+    public void processResultValue(Link value) throws IOException
+    {
+        JSONObject response = new JSONObject();
+
+        response.put("redirectURL", value.toRedirectURI());
+
+        masterProcessor.processResultValue(response);
+    }
+}

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageClassComponentEventResultProcessor.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageClassComponentEventResultProcessor.java?rev=709564&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageClassComponentEventResultProcessor.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageClassComponentEventResultProcessor.java
 Fri Oct 31 13:54:25 2008
@@ -0,0 +1,48 @@
+//  Copyright 2008 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.services;
+
+import org.apache.tapestry5.services.Ajax;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+import org.apache.tapestry5.services.ComponentSource;
+
+import java.io.IOException;
+
+/**
+ * Processes a Class result by converting the Class to a logical page name, 
then processing that.
+ *
+ * @see org.apache.tapestry5.services.ComponentSource
+ * @see 
org.apache.tapestry5.internal.services.AjaxPageNameComponentEventResultProcessor
+ */
+public class AjaxPageClassComponentEventResultProcessor implements 
ComponentEventResultProcessor<Class>
+{
+    private final ComponentSource componentSource;
+
+    private final ComponentEventResultProcessor masterProcessor;
+
+    public AjaxPageClassComponentEventResultProcessor(ComponentSource 
componentSource,
+                                                      @Ajax 
ComponentEventResultProcessor masterProcessor)
+    {
+        this.componentSource = componentSource;
+        this.masterProcessor = masterProcessor;
+    }
+
+    public void processResultValue(Class value) throws IOException
+    {
+        String pageName = 
componentSource.getPage(value).getComponentResources().getPageName();
+
+        masterProcessor.processResultValue(pageName);
+    }
+}

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java?rev=709564&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java
 Fri Oct 31 13:54:25 2008
@@ -0,0 +1,55 @@
+//  Copyright 2008 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.services;
+
+import org.apache.tapestry5.Link;
+import org.apache.tapestry5.services.Ajax;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+
+import java.io.IOException;
+
+/**
+ * A [EMAIL PROTECTED] 
org.apache.tapestry5.services.ComponentEventResultProcessor}, used for Ajax 
requests, for a String value
+ * that is interpreted as a logical page name.
+ *
+ * @see 
org.apache.tapestry5.internal.services.PageNameComponentEventResultProcessor
+ */
+public class AjaxPageNameComponentEventResultProcessor implements 
ComponentEventResultProcessor<String>
+{
+    private final ComponentEventResultProcessor masterProcessor;
+
+    private final LinkFactory linkFactory;
+
+    public AjaxPageNameComponentEventResultProcessor(@Ajax 
ComponentEventResultProcessor masterProcessor,
+                                                     LinkFactory linkFactory)
+    {
+        this.masterProcessor = masterProcessor;
+        this.linkFactory = linkFactory;
+    }
+
+    /**
+     * Obtains a page render [EMAIL PROTECTED] org.apache.tapestry5.Link} for 
the named, then builds a JSON reponse for the
+     * client.
+     *
+     * @param value page name
+     * @throws IOException
+     */
+    public void processResultValue(String value) throws IOException
+    {
+        Link link = linkFactory.createPageRenderLink(value, false);
+
+        masterProcessor.processResultValue(link);
+    }
+}

Copied: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameComponentEventResultProcessor.java
 (from r704144, 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StringResultProcessor.java)
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameComponentEventResultProcessor.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameComponentEventResultProcessor.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StringResultProcessor.java&r1=704144&r2=709564&rev=709564&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/StringResultProcessor.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageNameComponentEventResultProcessor.java
 Fri Oct 31 13:54:25 2008
@@ -23,13 +23,14 @@
  * Used when a component event handler returns a string value. The value is 
interpreted as the logical name of a page. A
  * link to the page will be sent as a redirect.
  */
-public class StringResultProcessor implements 
ComponentEventResultProcessor<String>
+public class PageNameComponentEventResultProcessor implements 
ComponentEventResultProcessor<String>
 {
     private final RequestPageCache requestPageCache;
 
     private final ActionRenderResponseGenerator generator;
 
-    public StringResultProcessor(RequestPageCache requestPageCache, 
ActionRenderResponseGenerator generator)
+    public PageNameComponentEventResultProcessor(RequestPageCache 
requestPageCache,
+                                                 ActionRenderResponseGenerator 
generator)
     {
         this.requestPageCache = requestPageCache;
         this.generator = generator;
@@ -41,5 +42,4 @@
 
         generator.generateResponse(page);
     }
-
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=709564&r1=709563&r2=709564&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
 Fri Oct 31 13:54:25 2008
@@ -1322,9 +1322,7 @@
             @InjectService("ComponentInstanceResultProcessor")
             ComponentEventResultProcessor componentInstanceProcessor,
 
-            ComponentClassResolver componentClassResolver,
-
-            final RequestPageCache requestPageCache,
+            ObjectLocator locator,
 
             MappedConfiguration<Class, ComponentEventResultProcessor> 
configuration)
     {
@@ -1344,24 +1342,27 @@
             }
         });
 
-        configuration.add(String.class, new 
StringResultProcessor(requestPageCache, actionRenderResponseGenerator));
+        configuration.add(String.class, 
locator.autobuild(PageNameComponentEventResultProcessor.class));
 
-        configuration.add(Class.class, new 
ClassResultProcessor(componentClassResolver, requestPageCache,
-                                                                
actionRenderResponseGenerator));
+        configuration.add(Class.class, 
locator.autobuild(ClassResultProcessor.class));
 
         configuration.add(Component.class, componentInstanceProcessor);
 
-        configuration.add(StreamResponse.class, new 
StreamResponseResultProcessor(response));
+        configuration.add(StreamResponse.class, 
locator.autobuild(StreamResponseResultProcessor.class));
     }
 
 
     /**
      * Contributes handlers for the following types: <dl> <dt>Object</dt> 
<dd>Failure case, added to provide more useful
      * exception message</dd> <dt>[EMAIL PROTECTED] RenderCommand}</dt> 
<dd>Typically, a [EMAIL PROTECTED] org.apache.tapestry5.Block}</dd>
-     * <dt>[EMAIL PROTECTED] Component}</dt> <dd>Renders the component and its 
body</dd> <dt>[EMAIL PROTECTED]
-     * org.apache.tapestry5.json.JSONObject} or [EMAIL PROTECTED] 
org.apache.tapestry5.json.JSONArray}</dt> <dd>The JSONObject is
-     * returned as a text/javascript response</dd> <dt>[EMAIL PROTECTED] 
org.apache.tapestry5.StreamResponse}</dt> <dd>The stream
-     * response is sent as the actual response</dd> </dl>
+     * <dt>[EMAIL PROTECTED] org.apache.tapestry5.annotations.Component}</dt> 
<dd>Renders the component and its body (unless its a
+     * page, in which case a redirect JSON response is sent)</dd> <dt>[EMAIL 
PROTECTED] org.apache.tapestry5.json.JSONObject} or
+     * [EMAIL PROTECTED] org.apache.tapestry5.json.JSONArray}</dt> <dd>The 
JSONObject is returned as a text/javascript
+     * response</dd> <dt>[EMAIL PROTECTED] 
org.apache.tapestry5.StreamResponse}</dt> <dd>The stream response is sent as 
the actual
+     * response</dd> <dt>String</dt> <dd>Interprets the value as a logical 
page name and sends a client response to
+     * redirect to that page</dd> <dt>[EMAIL PROTECTED] 
org.apache.tapestry5.Link}</dt> <dd>Sends a JSON response to redirect to
+     * the link</dd> <dt>[EMAIL PROTECTED] Class}</dt> <dd>Treats the class as 
a page class and sends a redirect for a page render
+     * for that page</dd> </dl>
      */
 
     public void contributeAjaxComponentEventResultProcessor(
@@ -1372,6 +1373,9 @@
         configuration.add(JSONObject.class, 
locator.autobuild(JSONObjectEventResultProcessor.class));
         configuration.add(JSONArray.class, 
locator.autobuild(JSONArrayEventResultProcessor.class));
         configuration.add(StreamResponse.class, new 
StreamResponseResultProcessor(response));
+        configuration.add(String.class, 
locator.autobuild(AjaxPageNameComponentEventResultProcessor.class));
+        configuration.add(Link.class, 
locator.autobuild(AjaxLinkComponentEventResultProcessor.class));
+        configuration.add(Class.class, 
locator.autobuild(AjaxPageClassComponentEventResultProcessor.class));
     }
 
     /**

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java?rev=709564&r1=709563&r2=709564&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
 Fri Oct 31 13:54:25 2008
@@ -1165,4 +1165,9 @@
     {
         expect(source.createEditModel(beanClass, messages)).andReturn(model);
     }
+
+    protected final ComponentEventResultProcessor 
mockComponentEventResultProcessor()
+    {
+        return newMock(ComponentEventResultProcessor.class);
+    }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js?rev=709564&r1=709563&r2=709564&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
 Fri Oct 31 13:54:25 2008
@@ -1270,9 +1270,19 @@
      */
     processReply : function(reply)
     {
-        this.show(reply.content);
+        var redirect = reply.redirectURL;
 
-        Tapestry.processScriptInReply(reply);
+        if (redirect)
+        {
+            window.location.pathname = redirect;
+        }
+        else
+        {
+
+            this.show(reply.content);
+
+            Tapestry.processScriptInReply(reply);
+        }
     },
 
     /** Initiates an Ajax request to update this zone by sending a request

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/app1/nested/ZoneDemo.tml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/nested/ZoneDemo.tml?rev=709564&r1=709563&r2=709564&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/nested/ZoneDemo.tml 
(original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/nested/ZoneDemo.tml 
Fri Oct 31 13:54:25 2008
@@ -60,7 +60,9 @@
         <li>
             <t:actionlink t:id="fail" zone="output">Failure on the server 
side</t:actionlink>
         </li>
-
+        <li>
+            <t:actionlink t:id="redirect" zone="output">Perform a redirect to 
another page</t:actionlink>
+        </li>
     </ul>
 
 

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java?rev=709564&r1=709563&r2=709564&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
 Fri Oct 31 13:54:25 2008
@@ -2422,4 +2422,16 @@
 
         assertText("visiblepassword", "secret");
     }
+
+    /**
+     * TAP5-187
+     */
+    public void zone_redirect_by_class()
+    {
+        start("Zone Demo");
+
+        clickAndWait("link=Perform a redirect to another page");
+
+        assertText("activePageName", "nested/AssetDemo");
+    }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/nested/ZoneDemo.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/nested/ZoneDemo.java?rev=709564&r1=709563&r2=709564&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/nested/ZoneDemo.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/nested/ZoneDemo.java
 Fri Oct 31 13:54:25 2008
@@ -123,4 +123,9 @@
     void onSelectedFromVoteNo() { vote = "No"; }
 
     Object onSuccessFromVote() { return voteOutput; }
+
+    Object onActionFromRedirect()
+    {
+        return AssetDemo.class;
+    }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessorTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessorTest.java?rev=709564&r1=709563&r2=709564&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessorTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessorTest.java
 Fri Oct 31 13:54:25 2008
@@ -36,21 +36,24 @@
         Page page = mockPage();
         ComponentResources resources = mockComponentResources();
         Component component = mockComponent();
+        Component pageComponent = mockComponent();
+
         ComponentPageElement element = mockComponentPageElement();
-        PageRenderQueue queue = mockPageRenderQueue();
+        ComponentEventResultProcessor master = 
mockComponentEventResultProcessor();
 
         train_getComponentResources(component, resources);
+        train_getPage(resources, pageComponent);
         train_getPageName(resources, pageName);
         train_get(cache, pageName, page);
         train_getNestedId(resources, nestedId);
         train_getComponentElementByNestedId(page, nestedId, element);
 
-        queue.initializeForPartialPageRender(element);
+        master.processResultValue(element);
 
         replay();
 
         ComponentEventResultProcessor<Component> processor = new 
AjaxComponentInstanceEventResultProcessor(
-                cache, queue);
+                cache, master);
 
         processor.processResultValue(component);
 
@@ -63,25 +66,22 @@
         String pageName = "Biff";
 
         RequestPageCache cache = mockRequestPageCache();
-        Page page = mockPage();
         ComponentResources resources = mockComponentResources();
         Component component = mockComponent();
-        ComponentPageElement element = mockComponentPageElement();
         PageRenderQueue queue = mockPageRenderQueue();
+        ComponentEventResultProcessor master = 
mockComponentEventResultProcessor();
 
         train_getComponentResources(component, resources);
+        train_getPage(resources, component);
         train_getPageName(resources, pageName);
-        train_get(cache, pageName, page);
-        train_getNestedId(resources, null);
-        train_getRootElement(page, element);
 
-        queue.initializeForPartialPageRender(element);
+        master.processResultValue(pageName);
 
         replay();
 
         ComponentEventResultProcessor<Component> processor = new 
AjaxComponentInstanceEventResultProcessor(
                 cache,
-                queue);
+                master);
 
         processor.processResultValue(component);
 


Reply via email to