You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by da...@apache.org on 2010/12/20 22:12:30 UTC
svn commit: r1051293 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/corelib/components/ test/app1/ test/conf/
test/java/org/apache/tapestry5/integration/app1/
test/java/org/apache/tapestry5/integration/app1/pages/
Author: dadams
Date: Mon Dec 20 21:12:29 2010
New Revision: 1051293
URL: http://svn.apache.org/viewvc?rev=1051293&view=rev
Log:
(closed TAP5-1378) Allow Delegate component to be used for creating in-template components
Added:
tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DelegateInline.tml
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DelegateInline.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Delegate.java
tapestry/tapestry5/trunk/tapestry-core/src/test/conf/ (props changed)
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GeneralComponentTests.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Delegate.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Delegate.java?rev=1051293&r1=1051292&r2=1051293&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Delegate.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Delegate.java Mon Dec 20 21:12:29 2010
@@ -15,12 +15,25 @@
package org.apache.tapestry5.corelib.components;
import org.apache.tapestry5.Block;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.annotations.InjectContainer;
import org.apache.tapestry5.annotations.Parameter;
+import org.apache.tapestry5.annotations.SupportsInformalParameters;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.runtime.Component;
/**
* A component that does not do any rendering of its own, but will delegate to some other object that can do rendering.
* This other object may be a component or a {@link Block} (among other things).
+ * <p>
+ * This component may also be used to create inline components. For each informal parameter the value will be stored as a
+ * render variable. To create an inline component, create a block
+ * and use Delegate multiple times in the template to render the block passing parameters to Delegate. In the block body
+ * reference the render variables using the "var:" binding prefix and the name of the parameter.
+ * <p>
+ * Note that the default binding prefix for parameter values is "literal".
*/
+@SupportsInformalParameters
public class Delegate
{
/**
@@ -30,8 +43,16 @@ public class Delegate
@Parameter(required = true)
private Object to;
- Object beginRender()
- {
+ @Inject private ComponentResources resources;
+ @InjectContainer private Component container;
+
+ Object beginRender()
+ {
+ for(String name : resources.getInformalParameterNames()) {
+ Object value = resources.getInformalParameter(name, Object.class);
+ container.getComponentResources().storeRenderVariable(name, value);
+ }
+
return to;
}
}
Added: tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DelegateInline.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DelegateInline.tml?rev=1051293&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DelegateInline.tml (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/DelegateInline.tml Mon Dec 20 21:12:29 2010
@@ -0,0 +1,11 @@
+<t:border xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
+ <h1>Inline Components using Delegate</h1>
+
+ <t:delegate to="block:block1" />
+ <t:delegate to="block:block2" firstName="Steve" lastName="Rogers" />
+ <t:delegate to="block:block2" firstName="Bruce" lastName="Banner" />
+
+ <t:block id="block1"><span id="block1">block 1</span></t:block>
+ <t:block id="block2"><p class="superhero">${var:firstName} ${var:lastName}</p></t:block>
+</t:border>
+
Propchange: tapestry/tapestry5/trunk/tapestry-core/src/test/conf/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Dec 20 21:12:29 2010
@@ -0,0 +1 @@
+testng-custom.xml
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GeneralComponentTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GeneralComponentTests.java?rev=1051293&r1=1051292&r2=1051293&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GeneralComponentTests.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GeneralComponentTests.java Mon Dec 20 21:12:29 2010
@@ -81,4 +81,16 @@ public class GeneralComponentTests exten
assertText("//td[@class='t-location-content t-location-current']", "<t:unavailablecomponent/>");
}
+
+ /** TAP5-1378 */
+ @Test public void using_delegate_for_inline_components() {
+ clickThru("Inline Delegate");
+
+ // no params
+ assertText("block1", "block 1");
+
+ // multiple renders w/ multiple parameters
+ assertText("xpath=(//p[@class='superhero'])[1]", "Steve Rogers");
+ assertText("xpath=(//p[@class='superhero'])[2]", "Bruce Banner");
+ }
}
Added: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DelegateInline.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DelegateInline.java?rev=1051293&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DelegateInline.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/DelegateInline.java Mon Dec 20 21:12:29 2010
@@ -0,0 +1,19 @@
+// Copyright 2006, 2007, 2008, 2009, 2010 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.integration.app1.pages;
+
+public class DelegateInline {
+
+}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java?rev=1051293&r1=1051292&r2=1051293&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java Mon Dec 20 21:12:29 2010
@@ -356,6 +356,8 @@ public class Index
"Actions can exist on pages other than the active page, via Blocks."),
new Item("unlessdemo", "Unless Demo", "use of the Unless component"),
+
+ new Item("delegateinline", "Inline Delegate", "Using the delegate component to create inline components"),
new Item("MagicValueEncoder", "Magic ValueEncoder Demo",
"Automatic creation of ValueEncoder using the TypeCoercer"),