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 2007/03/27 20:13:48 UTC

svn commit: r523022 - in /tapestry/tapestry4/trunk: ./ tapestry-annotations/ tapestry-annotations/src/java/org/apache/tapestry/annotations/ tapestry-annotations/src/test/org/apache/tapestry/annotations/ tapestry-contrib/ tapestry-examples/TimeTracker/ ...

Author: jkuhnert
Date: Tue Mar 27 11:13:45 2007
New Revision: 523022

URL: http://svn.apache.org/viewvc?view=rev&rev=523022
Log:
Added auto form binding support to @EventListener. It now automatically figures out which form a targeted IFormComponent is attached to and wires the event up to submit the enclosing form when the event is triggered - unless autoSubmit = false on the annotation.

Added:
    tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TargetValues.java   (contents, props changed)
      - copied, changed from r522724, tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/Target.java
Removed:
    tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/Target.java
Modified:
    tapestry/tapestry4/trunk/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java
    tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/MessagesTarget.java
    tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAnnotationUtils.java
    tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestBeanAnnotationWorker.java
    tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java
    tapestry/tapestry4/trunk/tapestry-annotations/tapestry-annotations.iml
    tapestry/tapestry4/trunk/tapestry-contrib/tapestry-contrib.iml
    tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/TimeTracker.iml
    tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
    tapestry/tapestry4/trunk/tapestry-examples/Workbench/Workbench.iml
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java
    tapestry/tapestry4/trunk/tapestry-portlet/tapestry-portlet.iml
    tapestry/tapestry4/trunk/tapestry.iml
    tapestry/tapestry4/trunk/tapestry.ipr
    tapestry/tapestry4/trunk/tapestry.iws

Modified: tapestry/tapestry4/trunk/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java Tue Mar 27 11:13:45 2007
@@ -29,7 +29,6 @@
  */
 public class EventListenerAnnotationWorker implements SecondaryAnnotationWorker
 {
- 
     private IComponentEventInvoker _invoker;
     
     /** 
@@ -43,8 +42,7 @@
     /** 
      * {@inheritDoc}
      */
-    public void peformEnhancement(EnhancementOperation op, IComponentSpecification spec, 
-            Method method, Resource classResource)
+    public void peformEnhancement(EnhancementOperation op, IComponentSpecification spec, Method method, Resource classResource)
     {
         EventListener listener = method.getAnnotation(EventListener.class);
         
@@ -58,16 +56,22 @@
         
         if (targets.length < 1 && elements.length < 1)
             throw new ApplicationRuntimeException(AnnotationMessages.targetsNotFound(method));
-        
+
         for (int i=0; i < targets.length; i++) {
-            
-            spec.addEventListener(targets[i], listener.events(), 
-                    method.getName(), formId, validateForm, async, focus, autoSubmit);
+
+            String mappedFormId = formId;
+
+            if (mappedFormId == null || mappedFormId.length() < 1) {
+                mappedFormId = _invoker.getPreviouslyMappedFormId(targets[i]);
+            }
+
+            spec.addEventListener(targets[i], listener.events(),
+                    method.getName(), mappedFormId, validateForm, async, focus, autoSubmit);
             
             _invoker.addEventListener(targets[i], spec);
             
-            if (formId != null)
-                _invoker.addFormEventListener(formId, spec);
+            if (mappedFormId != null && mappedFormId.length() > 0)
+                _invoker.addFormEventListener(mappedFormId, spec);
         }
         
         for (int i=0; i < elements.length; i++) {

Modified: tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/MessagesTarget.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/MessagesTarget.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/MessagesTarget.java (original)
+++ tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/MessagesTarget.java Tue Mar 27 11:13:45 2007
@@ -16,7 +16,7 @@
 import org.apache.tapestry.AbstractComponent;
 
 /**
- * Target "component" used to test the
+ * TargetValues "component" used to test the
  * {@link org.apache.tapestry.annotations.MessageAnnotationWorker}.
  * 
  * @author Howard Lewis Ship

Copied: tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TargetValues.java (from r522724, tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/Target.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TargetValues.java?view=diff&rev=523022&p1=tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/Target.java&r1=522724&p2=tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TargetValues.java&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/Target.java (original)
+++ tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TargetValues.java Tue Mar 27 11:13:45 2007
@@ -14,20 +14,19 @@
 
 package org.apache.tapestry.annotations;
 
-import java.util.ArrayList;
-import java.util.Map;
-
 import org.apache.tapestry.IAsset;
 import org.apache.tapestry.IComponent;
 
+import java.util.ArrayList;
+import java.util.Map;
+
 /**
  * Used by {@link org.apache.tapestry.annotations.TestAnnotationUtils}.
  * 
  * @author Howard M. Lewis Ship
  * @since 4.0
  */
-public abstract class Target
-{
+public abstract class TargetValues {
     public abstract String getStringValue();
 
     public abstract void setIntValue(int value);

Propchange: tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TargetValues.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TargetValues.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAnnotationUtils.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAnnotationUtils.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAnnotationUtils.java (original)
+++ tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAnnotationUtils.java Tue Mar 27 11:13:45 2007
@@ -14,11 +14,11 @@
 
 package org.apache.tapestry.annotations;
 
-import java.lang.reflect.Method;
-
 import org.apache.hivemind.ApplicationRuntimeException;
 import org.testng.annotations.Test;
 
+import java.lang.reflect.Method;
+
 /**
  * Tests for {@link org.apache.tapestry.annotations.AnnotationUtils}.
  * 
@@ -37,22 +37,22 @@
 
     public void testGetPropertyName()
     {
-        assertEquals("stringValue", attemptGetPropertyName(Target.class, "getStringValue"));
-        assertEquals("intValue", attemptGetPropertyName(Target.class, "setIntValue"));
-        assertEquals("booleanValue", attemptGetPropertyName(Target.class, "isBooleanValue"));
+        assertEquals("stringValue", attemptGetPropertyName(TargetValues.class, "getStringValue"));
+        assertEquals("intValue", attemptGetPropertyName(TargetValues.class, "setIntValue"));
+        assertEquals("booleanValue", attemptGetPropertyName(TargetValues.class, "isBooleanValue"));
     }
 
     public void testGetPropertyNameNotAGetter()
     {
         try
         {
-            attemptGetPropertyName(Target.class, "notAGetter");
+            attemptGetPropertyName(TargetValues.class, "notAGetter");
             unreachable();
         }
         catch (ApplicationRuntimeException ex)
         {
             assertEquals(
-                    "Annotated method public abstract java.lang.String org.apache.tapestry.annotations.Target.notAGetter() "
+                    "Annotated method public abstract java.lang.String org.apache.tapestry.annotations.TargetValues.notAGetter() "
                             + "should be an accessor (no parameters), or a mutator (single parameter, returns void).",
                     ex.getMessage());
         }
@@ -62,13 +62,13 @@
     {
         try
         {
-            attemptGetPropertyName(Target.class, "setNoParameters");
+            attemptGetPropertyName(TargetValues.class, "setNoParameters");
             unreachable();
         }
         catch (ApplicationRuntimeException ex)
         {
             assertEquals(
-                    "Annotated method public abstract void org.apache.tapestry.annotations.Target.setNoParameters() is named like a mutator method,"
+                    "Annotated method public abstract void org.apache.tapestry.annotations.TargetValues.setNoParameters() is named like a mutator method,"
                             + " but takes an incorrect number of parameters (it should have exactly one parameter).",
                     ex.getMessage());
         }
@@ -78,13 +78,13 @@
     {
         try
         {
-            attemptGetPropertyName(Target.class, "setNonVoidMethod");
+            attemptGetPropertyName(TargetValues.class, "setNonVoidMethod");
             unreachable();
         }
         catch (ApplicationRuntimeException ex)
         {
             assertEquals(
-                    "Annotated method public abstract java.lang.String org.apache.tapestry.annotations.Target.setNonVoidMethod(java.lang.String) "
+                    "Annotated method public abstract java.lang.String org.apache.tapestry.annotations.TargetValues.setNonVoidMethod(java.lang.String) "
                             + "is named like a mutator method, but does not return void.",
                     ex.getMessage());
         }
@@ -94,13 +94,13 @@
     {
         try
         {
-            attemptGetPropertyName(Target.class, "getHasParameters");
+            attemptGetPropertyName(TargetValues.class, "getHasParameters");
             unreachable();
         }
         catch (ApplicationRuntimeException ex)
         {
             assertEquals(
-                    "Annotated method public abstract java.lang.String org.apache.tapestry.annotations.Target.getHasParameters(java.lang.String) "
+                    "Annotated method public abstract java.lang.String org.apache.tapestry.annotations.TargetValues.getHasParameters(java.lang.String) "
                             + "is expected to be an accessor, and should have no parameters.",
                     ex.getMessage());
         }
@@ -110,13 +110,13 @@
     {
         try
         {
-            attemptGetPropertyName(Target.class, "isVoidGetter");
+            attemptGetPropertyName(TargetValues.class, "isVoidGetter");
             unreachable();
         }
         catch (ApplicationRuntimeException ex)
         {
             assertEquals(
-                    "Annotated method public abstract void org.apache.tapestry.annotations.Target.isVoidGetter() "
+                    "Annotated method public abstract void org.apache.tapestry.annotations.TargetValues.isVoidGetter() "
                             + "is named like an accessor method, but returns void.",
                     ex.getMessage());
         }

Modified: tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestBeanAnnotationWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestBeanAnnotationWorker.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestBeanAnnotationWorker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestBeanAnnotationWorker.java Tue Mar 27 11:13:45 2007
@@ -14,12 +14,6 @@
 
 package org.apache.tapestry.annotations;
 
-import static org.easymock.EasyMock.expect;
-
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.List;
-
 import org.apache.hivemind.Location;
 import org.apache.tapestry.bean.LightweightBeanInitializer;
 import org.apache.tapestry.enhance.EnhancementOperation;
@@ -27,8 +21,13 @@
 import org.apache.tapestry.spec.ComponentSpecification;
 import org.apache.tapestry.spec.IBeanSpecification;
 import org.apache.tapestry.spec.IComponentSpecification;
+import static org.easymock.EasyMock.expect;
 import org.testng.annotations.Test;
 
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.List;
+
 /**
  * Tests for {@link org.apache.tapestry.annotations.BeanAnnotationWorker}.
  * 
@@ -95,7 +94,7 @@
 
     public void testInitializer()
     {
-        EnhancementOperation op = newOp("beanWithInitializer", Target.class);
+        EnhancementOperation op = newOp("beanWithInitializer", TargetValues.class);
         IComponentSpecification spec = new ComponentSpecification();
 
         Method m = findMethod(AnnotatedPage.class, "getBeanWithInitializer");

Modified: tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java Tue Mar 27 11:13:45 2007
@@ -74,6 +74,7 @@
         assertEquals(1, listeners.size());
         
         assert !((EventBoundListener)listeners.get(0)).shouldFocusForm();
+        assert ((EventBoundListener)listeners.get(0)).isAutoSubmit();
     }
     
     public void test_Form_Event_Connection()
@@ -109,7 +110,7 @@
         assertEquals("testForm", formListener.getFormId());
         assertFalse(formListener.isValidateForm());
         assert formListener.shouldFocusForm();
-        assert !formListener.isAutoSubmit();
+        assert formListener.isAutoSubmit();
     }
     
     public void test_Targets_Not_Found()

Modified: tapestry/tapestry4/trunk/tapestry-annotations/tapestry-annotations.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-annotations/tapestry-annotations.iml?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-annotations/tapestry-annotations.iml (original)
+++ tapestry/tapestry4/trunk/tapestry-annotations/tapestry-annotations.iml Tue Mar 27 11:13:45 2007
@@ -11,7 +11,7 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="tapestry" />
+    <orderEntry type="module" module-name="tapestry-framework" exported="" />
     <orderEntry type="module-library" exported="">
       <library name="Maven Dependency: backport-util-concurrent:backport-util-concurrent:jar:2.2:compile">
         <CLASSES>

Modified: tapestry/tapestry4/trunk/tapestry-contrib/tapestry-contrib.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-contrib/tapestry-contrib.iml?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-contrib/tapestry-contrib.iml (original)
+++ tapestry/tapestry4/trunk/tapestry-contrib/tapestry-contrib.iml Tue Mar 27 11:13:45 2007
@@ -11,7 +11,7 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="tapestry" />
+    <orderEntry type="module" module-name="tapestry-framework" />
     <orderEntry type="module-library" exported="">
       <library name="Maven Dependency: backport-util-concurrent:backport-util-concurrent:jar:2.2:compile">
         <CLASSES>

Modified: tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/TimeTracker.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/TimeTracker.iml?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/TimeTracker.iml (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/TimeTracker.iml Tue Mar 27 11:13:45 2007
@@ -14,6 +14,9 @@
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="module" module-name="tapestry" />
+    <orderEntry type="module" module-name="tapestry-annotations" />
+    <orderEntry type="module" module-name="tapestry-contrib" />
+    <orderEntry type="module" module-name="tapestry-framework" />
     <orderEntry type="module-library">
       <library>
         <CLASSES>
@@ -371,6 +374,10 @@
       <attribute name="URI" value="&lt;N/A&gt;" />
       <url>jar://$MODULE_DIR$/../../../idea/lib/j2ee.jar!/</url>
     </containerElement>
+    <containerElement type="library" name="descriptor" level="project">
+      <attribute name="method" value="0" />
+      <attribute name="URI" value="/WEB-INF/classes" />
+    </containerElement>
     <containerElement type="library" name="Maven Dependency: ant:ant:jar:1.6.5:test" level="module">
       <attribute name="method" value="0" />
       <attribute name="URI" value="/WEB-INF/lib/ant-1.6.5.jar" />
@@ -546,6 +553,10 @@
     <containerElement type="library" name="Maven Dependency: org.openqa.selenium.server:selenium-server:jar:0.9.1-SNAPSHOT:test" level="module">
       <attribute name="method" value="0" />
       <attribute name="URI" value="/WEB-INF/lib/selenium-server-0.9.1-SNAPSHOT.jar" />
+    </containerElement>
+    <containerElement type="library" name="Maven Dependency: org.openqa.selenium.server:selenium-server:jar:standalone:0.9.1-SNAPSHOT:test" level="module">
+      <attribute name="method" value="0" />
+      <attribute name="URI" value="&lt;N/A&gt;" />
     </containerElement>
     <containerElement type="library" name="Maven Dependency: org.testng:testng:jar:jdk15:5.1:test" level="module">
       <attribute name="method" value="0" />

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?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- 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 Tue Mar 27 11:13:45 2007
@@ -18,11 +18,7 @@
 import org.apache.tapestry.annotations.EventListener;
 import org.apache.tapestry.annotations.InjectObject;
 import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.dojo.form.Autocompleter;
-import org.apache.tapestry.dojo.form.DefaultAutocompleteModel;
-import org.apache.tapestry.dojo.form.DropdownDatePicker;
-import org.apache.tapestry.dojo.form.DropdownTimePicker;
-import org.apache.tapestry.dojo.form.IAutocompleteModel;
+import org.apache.tapestry.dojo.form.*;
 import org.apache.tapestry.dojo.html.Dialog;
 import org.apache.tapestry.form.TextField;
 import org.apache.tapestry.html.BasePage;
@@ -106,8 +102,7 @@
      * Invoked when an item is selected from the project
      * selection list.
      */
-    @EventListener(events = "onValueChanged", targets = "projectChoose", 
-            submitForm = "taskForm")
+    @EventListener(events = "onValueChanged", targets = "projectChoose")
     public void projectSelected()
     {
         getBuilder().updateComponent("projectDescription");

Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/Workbench.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/Workbench.iml?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/Workbench.iml (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/Workbench.iml Tue Mar 27 11:13:45 2007
@@ -16,6 +16,9 @@
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="module" module-name="tapestry" />
+    <orderEntry type="module" module-name="tapestry-annotations" />
+    <orderEntry type="module" module-name="tapestry-contrib" />
+    <orderEntry type="module" module-name="tapestry-framework" />
     <orderEntry type="module-library">
       <library>
         <CLASSES>
@@ -283,6 +286,10 @@
       <attribute name="URI" value="&lt;N/A&gt;" />
       <url>jar://$MODULE_DIR$/../../../idea/lib/j2ee.jar!/</url>
     </containerElement>
+    <containerElement type="library" name="descriptor" level="project">
+      <attribute name="method" value="0" />
+      <attribute name="URI" value="/WEB-INF/classes" />
+    </containerElement>
     <containerElement type="library" name="Maven Dependency: ant:ant:jar:1.6.5:test" level="module">
       <attribute name="method" value="1" />
       <attribute name="URI" value="/WEB-INF/lib/ant-1.6.5.jar" />
@@ -454,6 +461,10 @@
     <containerElement type="library" name="Maven Dependency: org.openqa.selenium.server:selenium-server:jar:0.9.1-SNAPSHOT:test" level="module">
       <attribute name="method" value="1" />
       <attribute name="URI" value="/WEB-INF/lib/selenium-server-0.9.1-SNAPSHOT.jar" />
+    </containerElement>
+    <containerElement type="library" name="Maven Dependency: org.openqa.selenium.server:selenium-server:jar:standalone:0.9.1-SNAPSHOT:test" level="module">
+      <attribute name="method" value="0" />
+      <attribute name="URI" value="&lt;N/A&gt;" />
     </containerElement>
     <containerElement type="library" name="Maven Dependency: org.testng:testng:jar:jdk15:5.1:test" level="module">
       <attribute name="method" value="1" />

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java Tue Mar 27 11:13:45 2007
@@ -106,7 +106,34 @@
         if (!listeners.contains(listener))
             listeners.add(listener);
     }
-    
+
+    public void connectAutoSubmitEvents(String formId)
+    {
+        Iterator it = getEvents().iterator();
+        while (it.hasNext()) {
+            String key = (String)it.next();
+
+            List listeners = (List) _eventMap.get(key);
+            Iterator lit = listeners.iterator();
+            while (lit.hasNext()) {
+                
+                EventBoundListener listener = (EventBoundListener) lit.next();
+
+                listener.setFormId(formId);
+                lit.remove();
+
+                List formListeners = getFormEventListeners(key);
+                if (!formListeners.contains(listener))
+                    formListeners.add(listener);
+            }
+            
+            // remove mapping if empty
+            
+            if (listeners.size() == 0)
+                it.remove();
+        }
+    }
+
     /**
      * @return the componentId
      */

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java Tue Mar 27 11:13:45 2007
@@ -50,7 +50,7 @@
      */
     public EventBoundListener(String methodName, String componentId)
     {
-        this(methodName, componentId, false);
+        this(methodName, componentId, true);
     }
 
     /**
@@ -60,7 +60,7 @@
      */
     public EventBoundListener(String methodName, String componentId, boolean autoSubmit)
     {
-        this(methodName, null, false, componentId, false, false, autoSubmit);
+        this(methodName, null, false, componentId, true, false, autoSubmit);
     }
 
     /**
@@ -96,7 +96,7 @@
     public EventBoundListener(String methodName, String formId,
             boolean validateForm, String componentId, boolean async, boolean focus)
     {
-        this(methodName, formId, validateForm, componentId, async, focus, false);
+        this(methodName, formId, validateForm, componentId, async, focus, true);
     }
     
     /**

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java Tue Mar 27 11:13:45 2007
@@ -13,16 +13,17 @@
 // limitations under the License.
 package org.apache.tapestry.internal.event;
 
-import java.util.List;
-
 import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IForm;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.event.BrowserEvent;
 import org.apache.tapestry.event.ResetEventListener;
 import org.apache.tapestry.form.FormSupport;
+import org.apache.tapestry.form.IFormComponent;
 import org.apache.tapestry.spec.IComponentSpecification;
 
+import java.util.List;
+
 
 /**
  * Managed and handles invoking listener methods for components 
@@ -66,7 +67,24 @@
      *          The listener that has form bound event listeners.
      */
     void addFormEventListener(String formId, IComponentSpecification listener);
-    
+
+    /**
+     * Invoked to auto connect and re-wire any events on the specified component to whatever
+     * containing form it is in.
+     * 
+     * @param component The component to re-wire for submission to its form.
+     */
+    void connectAutoSubmitEvents(IFormComponent component);
+
+    /**
+     * Utility method used for autoSubmit bindings with listeners bound to {@link IFormComponent}s
+     * that don't know what their enclosing form id is until they are rendered.
+     * 
+     * @param formComponentId The components id.
+     * @return The previously mapped form id for that component, may be null.
+     */
+    String getPreviouslyMappedFormId(String formComponentId);
+
     /**
      * Gets a list of form bound event listeners previously bound via {@link #addFormEventListener(String, IComponentSpecification)}.
      * 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java Tue Mar 27 11:13:45 2007
@@ -13,13 +13,6 @@
 // limitations under the License.
 package org.apache.tapestry.internal.event.impl;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.hivemind.util.Defense;
 import org.apache.tapestry.IActionListener;
 import org.apache.tapestry.IComponent;
@@ -28,12 +21,15 @@
 import org.apache.tapestry.event.BrowserEvent;
 import org.apache.tapestry.event.ResetEventListener;
 import org.apache.tapestry.form.FormSupport;
+import org.apache.tapestry.form.IFormComponent;
 import org.apache.tapestry.internal.event.ComponentEventProperty;
 import org.apache.tapestry.internal.event.EventBoundListener;
 import org.apache.tapestry.internal.event.IComponentEventInvoker;
 import org.apache.tapestry.listener.ListenerInvoker;
 import org.apache.tapestry.spec.IComponentSpecification;
 
+import java.util.*;
+
 
 /**
  * Implementation of {@link IComponentEventInvoker}.
@@ -47,7 +43,9 @@
     private Map _formComponents = new HashMap();
     
     private ListenerInvoker _invoker;
-    
+
+    private Map _formIdMappings = new HashMap();
+
     /**
      * {@inheritDoc}
      */
@@ -263,6 +261,35 @@
         if (!listeners.contains(listener)) {
             listeners.add(listener);
         }
+    }
+
+    public void connectAutoSubmitEvents(IFormComponent component)
+    {
+        IForm form = component.getForm();
+        Defense.notNull(form, "form");
+        
+        String formId = form.getId();
+        Defense.notNull(formId, "formId");
+
+        List listeners = (List)_components.get(component.getId());
+        if (listeners == null)
+            return;
+
+        for (int i=0; i < listeners.size(); i++) {
+
+            IComponentSpecification spec = (IComponentSpecification)listeners.get(i);
+
+            spec.connectAutoSubmitEvents(component.getId(), form);
+            
+            addFormEventListener(formId, spec);
+            
+            _formIdMappings.put(component.getId(), formId);
+        }
+    }
+
+    public String getPreviouslyMappedFormId(String formComponentId)
+    {
+        return (String)_formIdMappings.get(formComponentId);
     }
 
     /**

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java Tue Mar 27 11:13:45 2007
@@ -13,26 +13,15 @@
 // limitations under the License.
 package org.apache.tapestry.services.impl;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 import org.apache.hivemind.ClassResolver;
 import org.apache.hivemind.Resource;
 import org.apache.hivemind.util.ClasspathResource;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IDirectEvent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRenderSupport;
-import org.apache.tapestry.TapestryUtils;
+import org.apache.tapestry.*;
 import org.apache.tapestry.dojo.IWidget;
 import org.apache.tapestry.engine.DirectEventServiceParameter;
 import org.apache.tapestry.engine.IEngineService;
 import org.apache.tapestry.engine.IScriptSource;
+import org.apache.tapestry.form.IFormComponent;
 import org.apache.tapestry.html.Body;
 import org.apache.tapestry.internal.event.ComponentEventProperty;
 import org.apache.tapestry.internal.event.EventBoundListener;
@@ -41,6 +30,8 @@
 import org.apache.tapestry.spec.IEventListener;
 import org.apache.tapestry.util.ScriptUtils;
 
+import java.util.*;
+
 
 /**
  * Implementation that handles connecting events to listener
@@ -144,7 +135,19 @@
         List listeners = _invoker.getEventListeners(comp.getId());
         if (listeners == null)
             return null;
-        
+
+        if (IFormComponent.class.isInstance(comp)) {
+            IFormComponent formComp = (IFormComponent)comp;
+            
+            _invoker.connectAutoSubmitEvents(formComp);
+
+            // re-wire form related events
+
+            comp.getSpecification().connectAutoSubmitEvents(comp.getId(), formComp.getForm());
+
+            listeners = _invoker.getEventListeners(comp.getId());
+        }
+
         List ret = new ArrayList();
         
         for (int i=0; i < listeners.size(); i++) {

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java Tue Mar 27 11:13:45 2007
@@ -17,7 +17,9 @@
 import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.hivemind.HiveMind;
 import org.apache.hivemind.Resource;
+import org.apache.hivemind.util.Defense;
 import org.apache.hivemind.util.ToStringBuilder;
+import org.apache.tapestry.IForm;
 import org.apache.tapestry.event.BrowserEvent;
 import org.apache.tapestry.internal.event.ComponentEventProperty;
 import org.apache.tapestry.internal.event.EventBoundListener;
@@ -603,8 +605,7 @@
                 .get(name);
 
         if (existing != null)
-            throw new ApplicationRuntimeException(SpecMessages.duplicateProperty(name, existing),
-                    spec.getLocation(), null);
+            throw new ApplicationRuntimeException(SpecMessages.duplicateProperty(name, existing), spec.getLocation(), null);
 
         claimProperty(name, spec);
 
@@ -724,9 +725,21 @@
             _elementEvents.put(elementId, property);
         }
         
-        property.addListener(events, methodName, formId, validateForm, async, focus);
+        property.addListener(events, methodName, formId, validateForm, async, focus, true);
     }
-    
+
+    public void connectAutoSubmitEvents(String componentId, IForm form)
+    {
+        Defense.notNull(form, "form");
+        
+        ComponentEventProperty property = getComponentEvents(componentId);
+        
+        if (property == null)
+            return;
+        
+        property.connectAutoSubmitEvents(form.getId());
+    }
+
     /**
      * {@inheritDoc}
      */

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java Tue Mar 27 11:13:45 2007
@@ -13,6 +13,7 @@
 // limitations under the License.
 package org.apache.tapestry.spec;
 
+import org.apache.tapestry.IForm;
 import org.apache.tapestry.event.BrowserEvent;
 import org.apache.tapestry.internal.event.ComponentEventProperty;
 import org.apache.tapestry.internal.event.EventBoundListener;
@@ -59,7 +60,16 @@
      */
     void addElementEventListener(String elementId, String[] events, 
             String methodName, String formId, boolean validateForm, boolean async, boolean focus);
-    
+
+    /**
+     * Invoked during rendering when a component has been detected as a {@link org.apache.tapestry.form.IFormComponent} and maye
+     * possibly need its events to be wired up as form events.
+     *
+     * @param componentId The components standard base id.
+     * @param form The form containing the component.
+     */
+    void connectAutoSubmitEvents(String componentId, IForm form);
+
     /**
      * Checks if any element events are bound to this component.
      * 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java Tue Mar 27 11:13:45 2007
@@ -13,13 +13,12 @@
 // limitations under the License.
 package org.apache.tapestry.internal.event;
 
-import java.util.List;
-import java.util.Set;
-
+import com.javaforge.tapestry.testng.TestBase;
 import org.apache.tapestry.event.BrowserEvent;
 import org.testng.annotations.Test;
 
-import com.javaforge.tapestry.testng.TestBase;
+import java.util.List;
+import java.util.Set;
 
 
 /**
@@ -51,6 +50,7 @@
         assertEquals("compid", listener.getComponentId());
         assertNull(listener.getFormId());
         assertEquals("doFoo", listener.getMethodName());
+        assert listener.isAutoSubmit();
     }
     
     public void test_Add_Form_Event_Listener()
@@ -78,6 +78,7 @@
         assertEquals(1, prop.getFormEvents().size());
         
         assertEquals("doFoo", listener.getMethodName());
+        assert listener.isAutoSubmit();
     }
     
     public void test_Add_Multiple_Event_Listener()
@@ -101,15 +102,14 @@
         List listeners = prop.getFormEventListeners("onchange");
         assertEquals(listeners.size(), 2);
         
-        /*
-        List listeners = prop.getFormEventListeners("onClick");
-        assertEquals(listeners.size(), 2);
+        listeners = prop.getFormEventListeners("onClick");
+        assertEquals(listeners.size(), 1);
         
         EventBoundListener listener = (EventBoundListener)listeners.get(0);
         assertEquals("compid", listener.getComponentId());
-        assertNull(listener.getFormId());
+        assertEquals("form1", listener.getFormId());
         assertEquals("doFoo", listener.getMethodName());
-        */
+        
     }
     
     public void test_Get_Form_Events()
@@ -130,5 +130,41 @@
         
         assertEquals("doFoo", listener.getMethodName());
         assertTrue(listener.shouldFocusForm());
+    }
+
+    public void test_Connect_Auto_Submit_Events()
+    {
+        String[] events = {"onClick"};
+        ComponentEventProperty prop = new ComponentEventProperty("compid");
+        
+        prop.addListener(events, "doFoo", null, false, false, false, true);
+
+        assertEquals("compid", prop.getComponentId());
+        assertEquals(prop.getEvents().size(), 1);
+        assertEquals(prop.getFormEvents().size(), 0);
+        
+        assertNotNull(prop.getEventListeners("onClick"));
+
+        List listeners = prop.getEventListeners("onClick");
+        assertEquals(listeners.size(), 1);
+        
+        EventBoundListener listener = (EventBoundListener)listeners.get(0);
+        assertEquals(listener.getComponentId(), "compid");
+        assertNull(listener.getFormId());
+        assertEquals(listener.getMethodName(), "doFoo");
+        assert listener.isAutoSubmit();
+
+        prop.connectAutoSubmitEvents("form");
+
+        assertEquals(prop.getEvents().size(), 0);
+        assertEquals(prop.getFormEvents().size(), 1);
+
+        listeners = prop.getFormEventListeners("onClick");
+        assertEquals(listeners.size(), 1);
+
+        listener = (EventBoundListener)listeners.get(0);
+        assertEquals(listener.getComponentId(), "compid");
+        assertEquals(listener.getFormId(), "form");
+        assertEquals(listener.getMethodName(), "doFoo");
     }
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java Tue Mar 27 11:13:45 2007
@@ -17,6 +17,7 @@
 import org.apache.tapestry.event.BrowserEvent;
 import org.apache.tapestry.event.EventTarget;
 import org.apache.tapestry.form.FormSupport;
+import org.apache.tapestry.form.IFormComponent;
 import org.apache.tapestry.internal.event.ComponentEventProperty;
 import org.apache.tapestry.listener.ListenerInvoker;
 import org.apache.tapestry.listener.ListenerMap;
@@ -72,7 +73,63 @@
         assertEquals(p.getFormEventListeners("onClick").size(), 2);
         assertEquals(p.getFormEvents().size(), 1);
     }
-    
+
+     public void test_Connect_Auto_Submit_Events()
+    {
+        IForm form = newMock(IForm.class);
+        checkOrder(form, false);
+        
+        IFormComponent formComponent = newMock(IFormComponent.class);
+        checkOrder(formComponent, false);
+        
+        ComponentEventInvoker invoker = new ComponentEventInvoker();
+        
+        IComponentSpecification spec = new ComponentSpecification();
+        spec.addEventListener("comp1", new String[] {"onClick"}, "testFoo", null, false, true, false, true);
+        spec.addEventListener("comp1", new String[] {"onClick"}, "testBar", null, false, true, false, true);
+
+        assert spec.getComponentEvents("comp1") != null;
+
+        ComponentEventProperty p = spec.getComponentEvents("comp1");
+
+        // should be only form events bound
+        
+        assertEquals(p.getEvents().size(), 1);
+        assertEquals(p.getEventListeners("onClick").size(), 2);
+
+        assertEquals(p.getComponentId(), "comp1");
+        assertEquals(p.getFormEventListeners("onClick").size(), 0);
+        assertEquals(p.getFormEvents().size(), 1);
+
+        // now re-connect with form
+
+        expect(formComponent.getForm()).andReturn(form);
+
+        expect(form.getId()).andReturn("form").anyTimes();
+        
+        expect(formComponent.getId()).andReturn("comp1").anyTimes();
+
+        replay();
+
+        invoker.addEventListener("comp1", spec);
+
+        invoker.connectAutoSubmitEvents(formComponent);
+
+        verify();
+
+        assertEquals(invoker.getEventListeners("comp1").size(), 1);
+        assertEquals(invoker.getFormEventListeners("form").size(), 1);
+
+        assertEquals(p.getEvents().size(), 0);
+        assertEquals(p.getEventListeners("onClick").size(), 0);
+
+        assertEquals(p.getComponentId(), "comp1");
+        assertEquals(p.getFormEventListeners("onClick").size(), 2);
+        assertEquals(p.getFormEvents().size(), 1);
+
+        assertEquals(invoker.getPreviouslyMappedFormId("comp1"), "form");
+    }
+
     public void test_Invoke_Component_Listener()
     {
         IRequestCycle cycle = newCycle();

Modified: tapestry/tapestry4/trunk/tapestry-portlet/tapestry-portlet.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-portlet/tapestry-portlet.iml?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-portlet/tapestry-portlet.iml (original)
+++ tapestry/tapestry4/trunk/tapestry-portlet/tapestry-portlet.iml Tue Mar 27 11:13:45 2007
@@ -12,7 +12,7 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="tapestry" />
+    <orderEntry type="module" module-name="tapestry-framework" />
     <orderEntry type="module-library">
       <library name="Maven Dependency: backport-util-concurrent:backport-util-concurrent:jar:2.2:compile">
         <CLASSES>

Modified: tapestry/tapestry4/trunk/tapestry.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry.iml?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry.iml (original)
+++ tapestry/tapestry4/trunk/tapestry.iml Tue Mar 27 11:13:45 2007
@@ -45,6 +45,8 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="tapestry-annotations" exported="" />
+    <orderEntry type="module" module-name="tapestry-framework" exported="" />
     <orderEntry type="module-library" exported="">
       <library name="Maven Dependency: ant:ant:jar:1.6.5:test">
         <CLASSES>

Modified: tapestry/tapestry4/trunk/tapestry.ipr
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry.ipr?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry.ipr (original)
+++ tapestry/tapestry4/trunk/tapestry.ipr Tue Mar 27 11:13:45 2007
@@ -161,7 +161,7 @@
         <option name="updateClasspathsEnabled" value="true" />
         <option name="sortDependenciesEnabled" value="true" />
         <option name="removeDuplicateDependenciesEnabled" value="true" />
-        <option name="respondToPomChangesEnabled" value="true" />
+        <option name="respondToPomChangesEnabled" value="false" />
         <option name="manageSourceRootsEnabled" value="true" />
         <option name="manageModuleInterdependenciesEnabled" value="true" />
         <option name="downloadSourcesEnabled" value="false" />
@@ -181,6 +181,8 @@
                 <value>
                   <collection type="java.util.TreeSet">
                     <entry type="java.lang.String" value="tapestry" />
+                    <entry type="java.lang.String" value="tapestry-annotations" />
+                    <entry type="java.lang.String" value="tapestry-framework" />
                   </collection>
                 </value>
                 <key type="java.lang.String" value="TimeTracker" />
@@ -189,6 +191,8 @@
                 <value>
                   <collection type="java.util.TreeSet">
                     <entry type="java.lang.String" value="tapestry" />
+                    <entry type="java.lang.String" value="tapestry-annotations" />
+                    <entry type="java.lang.String" value="tapestry-framework" />
                   </collection>
                 </value>
                 <key type="java.lang.String" value="Workbench" />
@@ -196,7 +200,16 @@
               <entry>
                 <value>
                   <collection type="java.util.TreeSet">
-                    <entry type="java.lang.String" value="tapestry" />
+                    <entry type="java.lang.String" value="tapestry-annotations" />
+                    <entry type="java.lang.String" value="tapestry-framework" />
+                  </collection>
+                </value>
+                <key type="java.lang.String" value="tapestry" />
+              </entry>
+              <entry>
+                <value>
+                  <collection type="java.util.TreeSet">
+                    <entry type="java.lang.String" value="tapestry-framework" />
                   </collection>
                 </value>
                 <key type="java.lang.String" value="tapestry-annotations" />
@@ -204,7 +217,7 @@
               <entry>
                 <value>
                   <collection type="java.util.TreeSet">
-                    <entry type="java.lang.String" value="tapestry" />
+                    <entry type="java.lang.String" value="tapestry-framework" />
                   </collection>
                 </value>
                 <key type="java.lang.String" value="tapestry-contrib" />
@@ -212,7 +225,7 @@
               <entry>
                 <value>
                   <collection type="java.util.TreeSet">
-                    <entry type="java.lang.String" value="tapestry" />
+                    <entry type="java.lang.String" value="tapestry-framework" />
                   </collection>
                 </value>
                 <key type="java.lang.String" value="tapestry-portlet" />

Modified: tapestry/tapestry4/trunk/tapestry.iws
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry.iws?view=diff&rev=523022&r1=523021&r2=523022
==============================================================================
--- tapestry/tapestry4/trunk/tapestry.iws (original)
+++ tapestry/tapestry4/trunk/tapestry.iws Tue Mar 27 11:13:45 2007
@@ -18,30 +18,29 @@
   <component name="ChangeListManager">
     <list default="true" name="Default" comment="">
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/resolver/PageSpecificationResolverTest.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/resolver/PageSpecificationResolverTest.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java" afterPath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/MessagesTarget.java" afterPath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/MessagesTarget.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TargetValues.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-examples/TimeTracker/src/context/css/timetracker.css" afterPath="$PROJECT_DIR$/tapestry-examples/TimeTracker/src/context/css/timetracker.css" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java" afterPath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-examples/Workbench/Workbench.iml" afterPath="$PROJECT_DIR$/tapestry-examples/Workbench/Workbench.iml" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/Target.java" afterPath="" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-contrib/tapestry-contrib.iml" afterPath="$PROJECT_DIR$/tapestry-contrib/tapestry-contrib.iml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/tapestry-framework.iml" afterPath="$PROJECT_DIR$/tapestry-framework/tapestry-framework.iml" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java" afterPath="$PROJECT_DIR$/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-examples/TimeTracker" afterPath="$PROJECT_DIR$/tapestry-examples/TimeTracker" />
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/resolver/context/WEB-INF/myapp/MalformedXmlTag.page" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-portlet/tapestry-portlet.iml" afterPath="$PROJECT_DIR$/tapestry-portlet/tapestry-portlet.iml" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry.iws" afterPath="$PROJECT_DIR$/tapestry.iws" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestBeanAnnotationWorker.java" afterPath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestBeanAnnotationWorker.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/tapestry-annotations.iml" afterPath="$PROJECT_DIR$/tapestry-annotations/tapestry-annotations.iml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAnnotationUtils.java" afterPath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAnnotationUtils.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry.ipr" afterPath="$PROJECT_DIR$/tapestry.ipr" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestSpecificationParser.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/junit/parse/TestSpecificationParser.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-examples/TimeTracker/TimeTracker.iml" afterPath="$PROJECT_DIR$/tapestry-examples/TimeTracker/TimeTracker.iml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java" />
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/junit/parse/MalformedXmlTag.page" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListener.java" afterPath="$PROJECT_DIR$/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListener.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/junit/TapestryTestCase.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/junit/TapestryTestCase.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java" afterPath="$PROJECT_DIR$/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry.iml" afterPath="$PROJECT_DIR$/tapestry.iml" />
     </list>
   </component>
@@ -238,7 +237,7 @@
       <showLibraryContents />
       <hideEmptyPackages />
       <abbreviatePackageNames />
-      <showStructure Favorites="false" PackagesPane="false" Scope="false" ProjectPane="false" />
+      <showStructure Scope="false" ProjectPane="false" PackagesPane="false" Favorites="false" />
       <autoscrollToSource />
       <autoscrollFromSource />
       <sortByType />
@@ -290,6 +289,13 @@
         <option name="Make" value="true" />
       </method>
     </tempConfiguration>
+    <configuration default="true" type="Remote" factoryName="Remote">
+      <option name="USE_SOCKET_TRANSPORT" value="true" />
+      <option name="SERVER_MODE" value="false" />
+      <option name="SHMEM_ADDRESS" value="javadebug" />
+      <option name="HOST" value="localhost" />
+      <option name="PORT" value="5005" />
+    </configuration>
     <configuration default="true" type="JUnit" factoryName="JUnit" enabled="false" merge="false">
       <module name="" />
       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
@@ -309,25 +315,6 @@
         <option name="Make" value="true" />
       </method>
     </configuration>
-    <configuration default="true" type="Remote" factoryName="Remote">
-      <option name="USE_SOCKET_TRANSPORT" value="true" />
-      <option name="SERVER_MODE" value="false" />
-      <option name="SHMEM_ADDRESS" value="javadebug" />
-      <option name="HOST" value="localhost" />
-      <option name="PORT" value="5005" />
-    </configuration>
-    <configuration default="true" type="Applet" factoryName="Applet">
-      <module name="" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="HTML_FILE_NAME" />
-      <option name="HTML_USED" value="false" />
-      <option name="WIDTH" value="400" />
-      <option name="HEIGHT" value="300" />
-      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
-      <option name="VM_PARAMETERS" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-    </configuration>
     <configuration default="true" type="Application" factoryName="Application" enabled="false" merge="false">
       <option name="MAIN_CLASS_NAME" />
       <option name="VM_PARAMETERS" />
@@ -362,6 +349,34 @@
         <option name="Make" value="true" />
       </method>
     </configuration>
+    <configuration default="true" type="Applet" factoryName="Applet">
+      <module name="" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="HTML_FILE_NAME" />
+      <option name="HTML_USED" value="false" />
+      <option name="WIDTH" value="400" />
+      <option name="HEIGHT" value="300" />
+      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
+      <option name="VM_PARAMETERS" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+    </configuration>
+    <configuration default="false" name="RemoteTimeTracker" type="Remote" factoryName="Remote">
+      <option name="USE_SOCKET_TRANSPORT" value="true" />
+      <option name="SERVER_MODE" value="false" />
+      <option name="SHMEM_ADDRESS" value="javadebug" />
+      <option name="HOST" value="localhost" />
+      <option name="PORT" value="8000" />
+      <RunnerSettings RunnerId="Debug">
+        <option name="DEBUG_PORT" value="8000" />
+        <option name="TRANSPORT" value="0" />
+        <option name="LOCAL" value="false" />
+      </RunnerSettings>
+      <ConfigurationWrapper RunnerId="Debug" />
+      <method>
+        <option name="Make" value="true" />
+      </method>
+    </configuration>
     <configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
       <Host>localhost</Host>
       <Port>5050</Port>
@@ -441,7 +456,7 @@
       <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="3" />
       <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="1" />
       <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.23568465" order="1" />
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" order="3" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2514523" order="3" />
       <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.28524047" order="8" />
       <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.20829876" order="8" />
       <window_info id="Maven" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.19568823" order="8" />
@@ -452,7 +467,7 @@
       <window_info id="Module Dependencies" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="3" />
       <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="8" />
       <window_info id="File View" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="3" />
-      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.22882181" order="0" />
+      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.23369037" order="0" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="2" />
       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" order="6" />
       <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25892118" order="2" />
@@ -477,7 +492,7 @@
     <option name="PERFORM_COMMIT_IN_BACKGROUND" value="false" />
     <option name="PUT_FOCUS_INTO_COMMENT" value="false" />
     <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
-    <option name="LAST_COMMIT_MESSAGE" value="-) Started partial implementation for doing form auto submissions on IFormComponent EventListener targets.&#10;&#10;-) Updated styling of TimeTracker&#10;&#10;-) Updated HiveMindExpressionCompiler to reflect new changes in ognl 2.7-SNAPSHOT." />
+    <option name="LAST_COMMIT_MESSAGE" value="Added auto form binding support to @EventListener. It now automatically figures out which form a targeted IFormComponent is attached to and wires the event up to submit the enclosing form when the event is triggered - unless autoSubmit = false on the annotation." />
     <option name="SAVE_LAST_COMMIT_MESSAGE" value="true" />
     <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8" />
     <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
@@ -485,12 +500,11 @@
     <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
     <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
     <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
-    <option name="ERROR_OCCURED" value="true" />
+    <option name="ERROR_OCCURED" value="false" />
     <option name="ACTIVE_VCS_NAME" value="svn" />
     <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
     <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
     <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
-    <MESSAGE value="Fixes for TAPESTRY-838. &#10;&#10;Exposed listener method name targeted for invocation in IActionListener / ListenerInvoker." />
     <MESSAGE value="Minor code cleanup. &#10;&#10;Fixed Palette documentation by removing funky character causing td definitions." />
     <MESSAGE value="Fixes TAPESTRY-872. &#10;&#10;The documented usage of PageAttachListener stated that page properties should be restored before the listener is called. Modified logic so that RequestCycle calls firePageAttached directly and removed the firePageAttached call within AbstractPage.attach" />
     <MESSAGE value="Upgraded commons-fileupload/commons-io." />
@@ -500,6 +514,7 @@
     <MESSAGE value="Fixes TAPESTRY-1378. &#10;&#10;The dropdown Date/Time pickers had specific java.util.Date bindings that made it impossible to use any other date objects (like Joda ). Refactored these components and the associated DateTranslator to make it possible to substitute the less well liked Date object with something else.." />
     <MESSAGE value="Js formatting looked a little funky towards the bottom." />
     <MESSAGE value="-) Started partial implementation for doing form auto submissions on IFormComponent EventListener targets.&#10;&#10;-) Updated styling of TimeTracker&#10;&#10;-) Updated HiveMindExpressionCompiler to reflect new changes in ognl 2.7-SNAPSHOT." />
+    <MESSAGE value="Added auto form binding support to @EventListener. It now automatically figures out which form a targeted IFormComponent is attached to and wires the event up to submit the enclosing form when the event is triggered - unless autoSubmit = false on the annotation." />
   </component>
   <component name="antWorkspaceConfiguration">
     <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
@@ -510,117 +525,113 @@
   </component>
   <component name="com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectRootMasterDetailsConfigurable" proportions="0.22673559" version="1">
     <option name="myPlainMode" value="false" />
-    <option name="myLastEditedConfigurable" value="tapestry-portlet" />
+    <option name="myLastEditedConfigurable" value="TimeTracker" />
   </component>
   <component name="com.intellij.profile.ui.ErrorOptionsConfigurable" proportions="0.16666667,0.5642857" version="1">
     <option name="myLastEditedConfigurable" value="Project Default" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/Persistent.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="24" column="0" selection-start="778" selection-end="778" vertical-scroll-proportion="0.19650654">
+        <state line="67" column="58" selection-start="2681" selection-end="2681" vertical-scroll-proportion="0.51192504">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/Target.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="40" column="57" selection-start="1242" selection-end="1242" vertical-scroll-proportion="0.3930131">
+        <state line="47" column="24" selection-start="1532" selection-end="1532" vertical-scroll-proportion="0.07785467">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/MetaPage.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="30" column="0" selection-start="916" selection-end="916" vertical-scroll-proportion="0.29475984">
+        <state line="145" column="45" selection-start="5522" selection-end="5522" vertical-scroll-proportion="0.59775084">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/Entity.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="20" column="0" selection-start="859" selection-end="894" vertical-scroll-proportion="0.13100436">
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
+        <state line="128" column="12" selection-start="4580" selection-end="4580" vertical-scroll-proportion="0.3654174">
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListener.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="19" column="0" selection-start="760" selection-end="760" vertical-scroll-proportion="0.08943782">
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
+        <state line="145" column="5" selection-start="4303" selection-end="4303" vertical-scroll-proportion="0.4471891">
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="250" column="52" selection-start="9231" selection-end="9231" vertical-scroll-proportion="0.5911414">
+        <state line="71" column="8" selection-start="2827" selection-end="2827" vertical-scroll-proportion="0.43441227">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="560" column="8" selection-start="21821" selection-end="21821" vertical-scroll-proportion="0.69335604">
+        <state line="110" column="5" selection-start="4176" selection-end="4176" vertical-scroll-proportion="0.30664396">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-contrib/src/java/org/apache/tapestry/contrib/table/model/ITableColumn.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="43" column="7" selection-start="1588" selection-end="1588" vertical-scroll-proportion="0.4585153">
+        <state line="733" column="8" selection-start="19827" selection-end="19827" vertical-scroll-proportion="0.43611583">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPage.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="145" column="4" selection-start="4283" selection-end="4283" vertical-scroll-proportion="0.8245614">
+        <state line="369" column="45" selection-start="12977" selection-end="12977" vertical-scroll-proportion="0.29471892">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="49" column="7" selection-start="1850" selection-end="1850" vertical-scroll-proportion="0.27768314">
+        <state line="85" column="61" selection-start="3308" selection-end="3365" vertical-scroll-proportion="0.43781942">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="102" column="53" selection-start="3707" selection-end="3707" vertical-scroll-proportion="0.012776831">
+        <state line="129" column="73" selection-start="4904" selection-end="4904" vertical-scroll-proportion="1.0175439">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/descriptor/META-INF/hivemodule.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="710" column="8" selection-start="18984" selection-end="18984" vertical-scroll-proportion="0.012776831">
+        <state line="206" column="24" selection-start="9256" selection-end="9256" vertical-scroll-proportion="0.48892674">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="57" column="8" selection-start="1984" selection-end="1984" vertical-scroll-proportion="0.4982964">
+        <state line="301" column="4" selection-start="9763" selection-end="9763" vertical-scroll-proportion="0.7189097">
           <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="102" column="8" selection-start="3845" selection-end="3845" vertical-scroll-proportion="0.28534922">
+        <state line="95" column="8" selection-start="3618" selection-end="3618" vertical-scroll-proportion="0.41226575">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="87" column="16" selection-start="4235" selection-end="4235" vertical-scroll-proportion="0.34497446">
+        <state line="66" column="0" selection-start="2376" selection-end="2376" vertical-scroll-proportion="0.5911414">
           <folding />
         </state>
       </provider>