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();
     }
+    
+    
 }