You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2006/08/08 04:04:10 UTC
svn commit: r429539 - in /tapestry/tapestry4/trunk:
tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/
tapestry-framework/src/java/org/apache/tapestry/
tapestry-framework/src/java/org/apache/tapestry/dojo/html/ tapestry-framew...
Author: jkuhnert
Date: Mon Aug 7 19:04:09 2006
New Revision: 429539
URL: http://svn.apache.org/viewvc?rev=429539&view=rev
Log:
TAPESTRY-1046.
The ComponentEventInvoker service wasn't filtering which methods to call when a particular event happened. It would only go
so far as resolving the component/page and called ~all~ @EventListener annotated methods. Oops. Fixed to be a little more discerning
in which methods/listeners it calls now.
Modified:
tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventInvoker.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventInvokerTest.java
Modified: tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java?rev=429539&r1=429538&r2=429539&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java Mon Aug 7 19:04:09 2006
@@ -99,8 +99,7 @@
* Invoked when an item is selected from the project
* selection list.
*/
- @EventListener(events = "selectOption", targets = "projectChoose",
- submitForm = "taskForm", validateForm = true)
+ @EventListener(events = "selectOption", targets = "projectChoose", submitForm = "taskForm")
public void projectSelected(IRequestCycle cycle)
{
cycle.getResponseBuilder().updateComponent("projectDescription");
@@ -131,4 +130,5 @@
getTaskDao().addTask(task);
}
+
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script?rev=429539&r1=429538&r2=429539&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script Mon Aug 7 19:04:09 2006
@@ -36,7 +36,7 @@
<foreach expression="formEvent[1]" key="formName">
var validateState=tapestry.form.forms["${formName}"].validateForm;
var validateForm=${formEvent[3]};
- tapestry.form.setFormValidating("${formname}", validateForm);
+ tapestry.form.setFormValidating("${formName}", validateForm);
<if expression="formEvent[2]">
tapestry.form.submitAsync("${formName}", content, null, validateForm);
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script?rev=429539&r1=429538&r2=429539&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script Mon Aug 7 19:04:09 2006
@@ -36,7 +36,7 @@
<foreach expression="formEvent[1]" key="formName">
var validateState=tapestry.form.forms["${formName}"].validateForm;
var validateForm=${formEvent[3]};
- tapestry.form.setFormValidating("${formname}", validateForm);
+ tapestry.form.setFormValidating("${formName}", validateForm);
<if expression="formEvent[2]">
tapestry.form.submitAsync("${formName}", content, null, validateForm);
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script?rev=429539&r1=429538&r2=429539&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/ElementEvent.script Mon Aug 7 19:04:09 2006
@@ -35,7 +35,7 @@
<foreach expression="formEvent[1]" key="formName">
var validateState=tapestry.form.forms["${formName}"].validateForm;
var validateForm=${formEvent[3]};
- tapestry.form.setFormValidating("${formname}", validateForm);
+ tapestry.form.setFormValidating("${formName}", validateForm);
<if expression="formEvent[2]">
tapestry.form.submitAsync("${formName}", content, null, validateForm);
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventInvoker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventInvoker.java?rev=429539&r1=429538&r2=429539&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventInvoker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventInvoker.java Mon Aug 7 19:04:09 2006
@@ -57,8 +57,7 @@
* @param event
* The event that started it all.
*/
- public void invokeListeners(IComponent component, IRequestCycle cycle,
- BrowserEvent event)
+ public void invokeListeners(IComponent component, IRequestCycle cycle, BrowserEvent event)
{
Defense.notNull(component, "component");
Defense.notNull(cycle, "cycle");
@@ -72,7 +71,7 @@
invokeListeners(prop, component, cycle, event);
}
- // else, may be an element invoked event
+ // Javascript event target element id
String targetId = (String)event.getTarget().get("id");
if (hasElementEvents(targetId)) {
@@ -86,9 +85,14 @@
IRequestCycle cycle, BrowserEvent event)
{
List listeners = prop.getEventListeners(event.getName());
+
for (int i=0; i < listeners.size(); i++) {
EventBoundListener eventListener = (EventBoundListener)listeners.get(i);
+ // ensure ~only~ the method that targeted this event gets called!
+ if (!eventListener.getComponentId().equals(event.getTarget().get("id")))
+ continue;
+
IComponent container = component.getContainer();
if (container == null) // only IPage has no container
container = component;
@@ -130,6 +134,10 @@
for (int i=0; i < listeners.size(); i++) {
EventBoundListener eventListener = (EventBoundListener)listeners.get(i);
+
+ // ensure ~only~ the method that targeted this event gets called!
+ if (!eventListener.getComponentId().equals(event.getTarget().get("id")))
+ continue;
final IComponent container =
(component.getContainer() == null) ? component : component.getContainer();
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventInvokerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventInvokerTest.java?rev=429539&r1=429538&r2=429539&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventInvokerTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventInvokerTest.java Mon Aug 7 19:04:09 2006
@@ -74,7 +74,8 @@
IComponent comp = newComponent();
ListenerInvoker listenerInvoker = newMock(ListenerInvoker.class);
ListenerMap listenerMap = newMock(ListenerMap.class);
- IActionListener listener = newMock(IActionListener.class);
+
+ IActionListener listener1 = newMock(IActionListener.class);
Map tprops = new HashMap();
tprops.put("id", "testId");
@@ -83,8 +84,8 @@
ComponentEventInvoker invoker = new ComponentEventInvoker();
invoker.setListenerInvoker(listenerInvoker);
- invoker.addEventListener("testId", new String[] { "onSelect" }, "fooListener",
- null, false, false);
+ invoker.addEventListener("testId", new String[] { "onSelect" },
+ "fooListener", null, false, false);
expect(comp.getId()).andReturn("testId");
@@ -96,9 +97,9 @@
expect(comp.getListeners()).andReturn(listenerMap);
- expect(listenerMap.getListener("fooListener")).andReturn(listener);
+ expect(listenerMap.getListener("fooListener")).andReturn(listener1);
- listenerInvoker.invokeListener(listener, comp, cycle);
+ listenerInvoker.invokeListener(listener1, comp, cycle);
replay();
@@ -155,6 +156,7 @@
ListenerInvoker listenerInvoker = newMock(ListenerInvoker.class);
ListenerMap listenerMap = newMock(ListenerMap.class);
IActionListener listener = newMock(IActionListener.class);
+ //IActionListener listener2 = newMock(IActionListener.class);
Map tprops = new HashMap();
tprops.put("id", "testId");
@@ -166,6 +168,9 @@
invoker.addEventListener("testId", new String[] { "onSelect" }, "fooListener",
"form1", false, false);
+ invoker.addEventListener("testId2", new String[] { "onSelect" }, "fooListener2",
+ "form1", false, false);
+
expect(formSupport.getForm()).andReturn(form);
expect(form.getId()).andReturn("form1");
@@ -184,4 +189,6 @@
verify();
}
+
+
}