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 2014/05/31 18:58:15 UTC
git commit: Closes TAP5-1658: If a Submit is used in a Grid,
trigger the event with the context of the current iteration
Repository: tapestry-5
Updated Branches:
refs/heads/master 9f9658dfb -> a7f700c47
Closes TAP5-1658: If a Submit is used in a Grid, trigger the event with the context of the current iteration
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/a7f700c4
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/a7f700c4
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/a7f700c4
Branch: refs/heads/master
Commit: a7f700c47e494f5227929481a82fb3ad675115f3
Parents: 9f9658d
Author: Jochen Kemnade <jk...@apache.org>
Authored: Thu May 29 11:53:37 2014 +0200
Committer: Jochen Kemnade <jk...@apache.org>
Committed: Sat May 31 18:56:37 2014 +0200
----------------------------------------------------------------------
.../tapestry5/corelib/components/Submit.java | 13 ++++-
.../test/app1/GridWithSubmitWithContextDemo.tml | 16 ++++++
.../tapestry5/integration/app1/GridTests.java | 16 ++++++
.../pages/GridWithSubmitWithContextDemo.java | 60 ++++++++++++++++++++
.../tapestry5/integration/app1/pages/Index.java | 4 +-
5 files changed, 107 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/a7f700c4/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Submit.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Submit.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Submit.java
index e0f6fc7..efb1c88 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Submit.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Submit.java
@@ -17,6 +17,7 @@ package org.apache.tapestry5.corelib.components;
import org.apache.tapestry5.*;
import org.apache.tapestry5.annotations.*;
import org.apache.tapestry5.corelib.SubmitMode;
+import org.apache.tapestry5.internal.util.Holder;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import org.apache.tapestry5.json.JSONArray;
@@ -194,12 +195,22 @@ public class Submit implements ClientElement
if (disabled || !selected(clientId, elementName))
return;
+ // TAP5-1658: copy the context of the current Submit instance so we trigger the event with
+ // the correct context later
+ final Holder<Object[]> currentContextHolder = Holder.create();
+ if (context != null)
+ {
+ Object[] currentContext = new Object[context.length];
+ System.arraycopy(context, 0, currentContext, 0, context.length);
+ currentContextHolder.put(currentContext);
+ }
+
Runnable sendNotification = new Runnable()
{
public void run()
{
// TAP5-1024: allow for navigation result from the event callback
- resources.triggerEvent(event, context, eventCallback);
+ resources.triggerEvent(event, currentContextHolder.get(), eventCallback);
}
};
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/a7f700c4/tapestry-core/src/test/app1/GridWithSubmitWithContextDemo.tml
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/app1/GridWithSubmitWithContextDemo.tml b/tapestry-core/src/test/app1/GridWithSubmitWithContextDemo.tml
new file mode 100644
index 0000000..657028d
--- /dev/null
+++ b/tapestry-core/src/test/app1/GridWithSubmitWithContextDemo.tml
@@ -0,0 +1,16 @@
+<html t:type="Border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
+
+ <h1>Grid with Submit with context Demo</h1>
+
+ <t:alerts />
+ <t:form>
+ <table t:type="grid" t:id="grid" source="tracks" row="track" add="delete">
+ <t:parameter name="ratingcell">
+ <t:outputRating rating="track.rating"/>
+ </t:parameter>
+ <t:parameter name="deletecell">
+ <t:submit class="btn" context="track"/>
+ </t:parameter>
+ </table>
+ </t:form>
+</html>
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/a7f700c4/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GridTests.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GridTests.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GridTests.java
index 2d5f7b3..f18f618 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GridTests.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/GridTests.java
@@ -351,5 +351,21 @@ public class GridTests extends App1TestCase
}
+ /**
+ * TAP5-1658
+ */
+ @Test
+ public void submit_with_context_inside_grid()
+ {
+ openLinks("Grid with Submit with context");
+
+ clickAndWait("css=tr[data-grid-row='first'] input[type='submit']");
+ assertTextPresent("Deleted Bug Juice");
+
+ clickAndWait("css=tr[data-grid-row='last'] input[type='submit']");
+ assertTextPresent(" Deleted Studying Stones");
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/a7f700c4/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridWithSubmitWithContextDemo.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridWithSubmitWithContextDemo.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridWithSubmitWithContextDemo.java
new file mode 100644
index 0000000..9d4a774
--- /dev/null
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GridWithSubmitWithContextDemo.java
@@ -0,0 +1,60 @@
+// Copyright 2007, 2008, 2011 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;
+
+import org.apache.tapestry5.alerts.AlertManager;
+import org.apache.tapestry5.alerts.Duration;
+import org.apache.tapestry5.alerts.Severity;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.corelib.components.Grid;
+import org.apache.tapestry5.func.F;
+import org.apache.tapestry5.integration.app1.data.Track;
+import org.apache.tapestry5.integration.app1.services.MusicLibrary;
+import org.apache.tapestry5.ioc.annotations.Inject;
+
+import java.util.Comparator;
+
+public class GridWithSubmitWithContextDemo
+{
+ @Inject
+ private MusicLibrary library;
+
+ @Inject
+ private AlertManager alertManager;
+
+ @Property
+ private Track track;
+
+ @InjectComponent
+ private Grid grid;
+
+ public Iterable<Track> getTracks()
+ {
+ return F.flow(library.getTracks()).sort(new Comparator<Track>(){
+
+ @Override
+ public int compare(Track arg0, Track arg1) {
+ return arg0.getId().compareTo(arg1.getId());
+ }
+
+ });
+ }
+
+ void onSelected(Track track){
+ alertManager.alert(Duration.SINGLE, Severity.INFO, "Deleted "+track.getTitle());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/a7f700c4/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
index bcaae7b..992bb34 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
@@ -570,7 +570,9 @@ public class Index
new Item("GenericTypeDemo", "Generic bound type demo", "Tests that generic type info is available for generic bindings"),
- new Item("FormFieldClientIdParameterDemo", "Form Field clientId Parameter Demo", "Shows and tests how to explicitly set the id of a form field component")
+ new Item("FormFieldClientIdParameterDemo", "Form Field clientId Parameter Demo", "Shows and tests how to explicitly set the id of a form field component"),
+
+ new Item("gridwithsubmitwithcontextdemo", "Grid with Submit with context", "A grid whose rows contain a Submit component with context")
);
static