Author: hlship
Date: Mon Mar 12 10:14:05 2007
New Revision: 517292
URL: http://svn.apache.org/viewvc?view=rev&rev=517292
Log:
TAPESTRY-1344: Render phase methods should be allowed to return a Renderable
object
Added:
tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/RenderableDemo.html
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/RenderableDemo.java
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/Start.html
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java?view=diff&rev=517292&r1=517291&r2=517292
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
Mon Mar 12 10:14:05 2007
@@ -31,6 +31,7 @@
import org.apache.tapestry.ComponentResources;
import org.apache.tapestry.Link;
import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.Renderable;
import org.apache.tapestry.dom.Element;
import org.apache.tapestry.internal.InternalComponentResources;
import org.apache.tapestry.internal.TapestryInternalUtils;
@@ -141,6 +142,23 @@
add(command);
return false; // do not abort!
+ }
+
+ if (result instanceof Renderable)
+ {
+ final Renderable renderable = (Renderable) result;
+
+ RenderCommand wrapper = new RenderCommand()
+ {
+ public void render(MarkupWriter writer, RenderQueue queue)
+ {
+ renderable.render(writer);
+ }
+ };
+
+ add(wrapper);
+
+ return false;
}
throw new TapestryException(StructureMessages.wrongEventResultType(
Added:
tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/RenderableDemo.html
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/RenderableDemo.html?view=auto&rev=517292
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/RenderableDemo.html
(added)
+++
tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/RenderableDemo.html
Mon Mar 12 10:14:05 2007
@@ -0,0 +1,10 @@
+<html t:type="Border"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+
+ <h1>Renderable Demo</h1>
+
+ <p>
+ The following text is provided by a Renderable: [<t:delegate
to="renderable"/>]
+ </p>
+
+
+</html>
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/Start.html
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/Start.html?view=diff&rev=517292&r1=517291&r2=517292
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/Start.html
(original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/Start.html Mon
Mar 12 10:14:05 2007
@@ -57,15 +57,16 @@
for component parameters </li>
<li>
<a t:type="PageLink" page="ValidForm">ValidForm</a> -- server-side
input validation</li>
- </ul>
- </td>
- <td>
- <ul>
<li>
<a t:type="PageLink" page="AnyDemo">AnyDemo</a> -- test out the
Any component </li>
<li>
<a t:type="PageLink"
page="PasswordFieldDemo">PasswordFieldDemo</a> -- test for the
PasswordField component </li>
+ </ul>
+ </td>
+ <td>
+ <ul>
+
<li>
<a t:type="PageLink"
page="RenderComponentDemo">RenderComponentDemo</a> -- components
that "nominate" other components to render </li>
@@ -118,6 +119,10 @@
<li>
<t:actionlink t:id="badreturntype">BadReturnType
Demo</t:actionlink> -- Error report due
to event handler method returning unacceptible return value (an
Integer) </li>
+
+ <li>
+ <t:pagelink page="renderabledemo">Renderable Demo</t:pagelink> --
Shows that render
+ phase methods can return a Renderable object </li>
</ul>
</td>
</tr>
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java?view=diff&rev=517292&r1=517291&r2=517292
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
(original)
+++
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
Mon Mar 12 10:14:05 2007
@@ -865,4 +865,13 @@
"An event handler for component
org.apache.tapestry.integration.app1.pages.Start returned the value 20 (from
method
org.apache.tapestry.integration.app1.pages.Start.onActionFromBadReturnType()
(at Start.java:34)). Return type java.lang.Integer can not be handled.");
}
+
+ @Test
+ public void render_phase_method_may_return_renderable()
+ {
+ open(BASE_URL);
+ clickAndWait("link=Renderable Demo");
+
+ assertTextPresent("Renderable Demo", "[This proves it works.]");
+ }
}
Added:
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/RenderableDemo.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/RenderableDemo.java?view=auto&rev=517292
==============================================================================
---
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/RenderableDemo.java
(added)
+++
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/RenderableDemo.java
Mon Mar 12 10:14:05 2007
@@ -0,0 +1,32 @@
+// Copyright 2007 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.tapestry.integration.app1.pages;
+
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.Renderable;
+
+public class RenderableDemo
+{
+ public Renderable getRenderable()
+ {
+ return new Renderable()
+ {
+ public void render(MarkupWriter writer)
+ {
+ writer.write("This proves it works.");
+ }
+ };
+ }
+}