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/06/02 02:24:01 UTC

svn commit: r411005 - in /tapestry/tapestry4/trunk: ./ annotations/src/java/org/apache/tapestry/annotations/ examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/ framework/src/java/org/apache/tapestry/ framework/src/java/org/apache/tapes...

Author: jkuhnert
Date: Thu Jun  1 17:24:00 2006
New Revision: 411005

URL: http://svn.apache.org/viewvc?rev=411005&view=rev
Log:
Fixed issues with resolving client id's on all components. 

Removed:
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/DatePicker.js.merge-left.r384672
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/DatePicker.js.merge-right.r384672
Modified:
    tapestry/tapestry4/trunk/annotations/src/java/org/apache/tapestry/annotations/EventListener.java
    tapestry/tapestry4/trunk/examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/ComponentEvent.script
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/IComponent.java
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/IFormComponent.java
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/ElementEvent.script
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
    tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/form/MockForm.java
    tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java
    tapestry/tapestry4/trunk/status.xml

Modified: tapestry/tapestry4/trunk/annotations/src/java/org/apache/tapestry/annotations/EventListener.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/annotations/src/java/org/apache/tapestry/annotations/EventListener.java?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/annotations/src/java/org/apache/tapestry/annotations/EventListener.java (original)
+++ tapestry/tapestry4/trunk/annotations/src/java/org/apache/tapestry/annotations/EventListener.java Thu Jun  1 17:24:00 2006
@@ -48,4 +48,18 @@
      * Ie <code>events = {"onClick", "onOptionSelect"}</code> etc..
      */
     String[] events();
+    
+    /**
+     * The form id of the form that should have its data submitted when one 
+     * of the specified events is triggered.
+     * @return
+     */
+    String submitForm() default "";
+    
+    /**
+     * Whether or not to perform form validation if the {@link #form()} parameter has 
+     * been set. Default is false.
+     * @return
+     */
+    boolean validateForm() default false;
 }

Modified: tapestry/tapestry4/trunk/examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java (original)
+++ tapestry/tapestry4/trunk/examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java Thu Jun  1 17:24:00 2006
@@ -40,7 +40,7 @@
     
     @Component(type = "Autocompleter", id = "projectChoose",
             bindings = { "model=projectModel", "value=selectedProject",
-            "displayName=message:choose.project", "filterOnChange=ognl:true"})
+            "displayName=message:choose.project", "filterOnChange=true"})
     public abstract Autocompleter getProjectSelection();
     
     @InjectObject("service:timetracker.dao.ProjectDao")

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java Thu Jun  1 17:24:00 2006
@@ -412,6 +412,20 @@
         return _idPath;
     }
 
+    /**
+     * 
+     * {@inheritDoc}
+     * @since 4.1
+     */
+    public String getClientId()
+    {
+        IBinding id = (IBinding)_bindings.get("id");
+        if (id == null)
+            return getId();
+        
+        return id.getObject().toString();
+    }
+    
     public IPage getPage()
     {
         return _page;

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/ComponentEvent.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/ComponentEvent.script?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/ComponentEvent.script (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/ComponentEvent.script Thu Jun  1 17:24:00 2006
@@ -14,10 +14,10 @@
     </body>
     <initialization>
         <foreach expression="events" key="event">
-        dojo.event.connect(dojo.byId("${component.id}"), "${event}", function(e) {
+        dojo.event.connect(dojo.byId("${component.clientId}"), "${event}", function(e) {
             var content={beventname:"${event}"};
             tapestry.event.buildEventProperties(e, content);
-            if (!content["beventtarget.id"]) content["beventtarget.id"]="${component.id}";
+            if (!content["beventtarget.id"]) content["beventtarget.id"]="${component.clientId}";
             
             tapestry.bind("${url}", content);
         });

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/IComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/IComponent.java?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/IComponent.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/IComponent.java Thu Jun  1 17:24:00 2006
@@ -174,6 +174,17 @@
     String getIdPath();
 
     /**
+     * Returns the component's client-side element id. This has traditionally been an 
+     * {@link IFormComponent} only binding but now applies to all components. The method
+     * should check to see if any id parameter/property has been set already and use that
+     * above all others, falling back to {@link #getId()} if nothing else is found.
+     * 
+     * @return the id, or null if the component doesn't support a client id.
+     * @since 4.1
+     */
+    String getClientId();
+    
+    /**
      * Returns the page which ultimately contains the receiver. A page will return itself.
      */
 

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/dojo/html/WidgetEvent.script Thu Jun  1 17:24:00 2006
@@ -14,10 +14,10 @@
     </body>
     <initialization>
         <foreach expression="events" key="event">
-        dojo.event.connect(dojo.widget.byId("${component.id}"), "${event}", function(e) {
+        dojo.event.connect(dojo.widget.byId("${component.clientId}"), "${event}", function(e) {
             var content={beventname:"${event}"};
             tapestry.event.buildEventProperties(e, content);
-            if (!content["beventtarget.id"]) content["beventtarget.id"]="${component.id}";
+            if (!content["beventtarget.id"]) content["beventtarget.id"]="${component.clientId}";
             
             tapestry.bind("${url}", content);
         });

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java Thu Jun  1 17:24:00 2006
@@ -184,5 +184,10 @@
 
     protected abstract void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle);
 
+    /**
+     * 
+     * @param writer
+     * @param cycle
+     */
     protected abstract void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle);
 }

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/IFormComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/IFormComponent.java?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/IFormComponent.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/IFormComponent.java Thu Jun  1 17:24:00 2006
@@ -86,6 +86,12 @@
      * {@link #getName()}, if a component renders more than once (such as inside a loop) then on
      * each render it will have a different clientId.
      * 
+     * <p>
+     * <b>Note:</b>Though semantically this method should result in the roughly the same results,
+     * the method used to create unique client ID's on form components is <i>not</i> the same as that
+     * defined in {@link IComponent}. 
+     * </p>
+     * 
      * @return the id, or null if the component doesn't support an id.
      * @since 4.0
      */

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/ElementEvent.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/ElementEvent.script?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/ElementEvent.script (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/ElementEvent.script Thu Jun  1 17:24:00 2006
@@ -17,7 +17,7 @@
         dojo.event.connect(dojo.byId("${target}"), "${event}", function(e) {
             var content={beventname:"${event}"};
             tapestry.event.buildEventProperties(e, content);
-            if (!content["beventtarget.id"]) content["beventtarget.id"]="${component.id}";
+            if (!content["beventtarget.id"]) content["beventtarget.id"]="${target}";
             
             tapestry.bind("${url}", content);
         });

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java Thu Jun  1 17:24:00 2006
@@ -56,6 +56,10 @@
     
     private ClassResolver _resolver;
     
+    private ClasspathResource _componentResource;
+    private ClasspathResource _widgetResource;
+    private ClasspathResource _elementResource;
+    
     /** 
      * {@inheritDoc}
      */
@@ -95,7 +99,7 @@
         String url = _eventEngine.getLink(false, dsp).getURL();
         
         PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, component);
-        Resource resource = new ClasspathResource(_resolver, _elementScript);
+        Resource resource = getScript(component);
         
         Map elements = _invoker.getElementEvents();
         Iterator keys = elements.keySet().iterator();
@@ -118,10 +122,22 @@
     
     Resource getScript(IComponent component)
     {
-        if (IWidget.class.isInstance(component))
-            return new ClasspathResource(_resolver, _widgetScript);
+        if (IWidget.class.isInstance(component)) {
+            if (_widgetResource == null) 
+                _widgetResource = new ClasspathResource(_resolver, _widgetScript);
+            return _widgetResource;
+        }
+        
+        if (Body.class.isInstance(component)) {
+            if (_elementResource == null) 
+                _elementResource = new ClasspathResource(_resolver, _elementScript);
+            return _elementResource;
+        }
+        
+        if (_componentResource == null) 
+            _componentResource = new ClasspathResource(_resolver, _componentScript);
         
-        return new ClasspathResource(_resolver, _componentScript);
+        return _componentResource;
     }
     
     /**

Modified: tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/form/MockForm.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/form/MockForm.java?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/form/MockForm.java (original)
+++ tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/form/MockForm.java Thu Jun  1 17:24:00 2006
@@ -140,6 +140,11 @@
     {
     }
 
+    public String getClientId()
+    {
+        return null;
+    }
+    
     public Map getAssets()
     {
         return null;

Modified: tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java (original)
+++ tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java Thu Jun  1 17:24:00 2006
@@ -32,6 +32,9 @@
 import org.apache.tapestry.engine.IEngineService;
 import org.apache.tapestry.engine.ILink;
 import org.apache.tapestry.engine.IScriptSource;
+import org.apache.tapestry.html.Body;
+import org.easymock.MockControl;
+import org.easymock.classextension.MockClassControl;
 
 
 /**
@@ -138,6 +141,41 @@
         replayControls();
         
         worker.renderComponent(cycle, widget);
+        
+        verifyControls();
+    }
+    
+    public void testScriptResource()
+    {   
+        ClassResolver resolver = new DefaultClassResolver();
+        ComponentEventInvoker invoker = new ComponentEventInvoker();
+        
+        String compScript = "/org/apache/tapestry/ComponentEvent.script";
+        String widScript = "/org/apache/tapestry/dojo/html/WidgetEvent.script";
+        String elementScript = "/org/apache/tapestry/html/ElementEvent.script";
+        
+        ComponentEventConnectionWorker worker = new ComponentEventConnectionWorker();
+        worker.setClassResolver(resolver);
+        worker.setComponentEventInvoker(invoker);
+        worker.setComponentScript(compScript);
+        worker.setWidgetScript(widScript);
+        worker.setElementScript(elementScript);
+        
+        IDirectEvent component = (IDirectEvent)newMock(IDirectEvent.class);
+        IWidget widget = (IWidget)newMock(IWidget.class);
+        MockControl bodyControl = MockClassControl.createControl(Body.class);
+        Body body = (Body) bodyControl.getMock();
+        
+        assertNotNull(worker.getScript(component));
+        assertEquals(compScript, worker.getScript(component).getPath());
+        
+        assertNotNull(worker.getScript(widget));
+        assertEquals(widScript, worker.getScript(widget).getPath());
+        
+        assertNotNull(worker.getScript(body));
+        assertEquals(elementScript, worker.getScript(body).getPath());
+        
+        replayControls();
         
         verifyControls();
     }

Modified: tapestry/tapestry4/trunk/status.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/status.xml?rev=411005&r1=411004&r2=411005&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/status.xml (original)
+++ tapestry/tapestry4/trunk/status.xml Thu Jun  1 17:24:00 2006
@@ -92,6 +92,9 @@
       <action type="add" dev="JK" due-to="James Carman" fixes-bug="TAPESTRY-947">
         Changed data squeezer to be a pipeline, allowing for a more flexible contribution/configuration.
       </action>
+      <action type="add" dev="JK" >
+        Added new IComponent.getClientId for global element id resolution on all components.
+      </action>
     </release>
     <release version="4.0.1" date="unreleased" >
       <action type="fix" dev="JK" fixes-bug="TAPESTRY-863" due-to="unknown contributor">